From df1819daa91d207edba11967fe67b8d8d94049e5 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Wed, 14 Nov 2018 01:41:42 -0500 Subject: [PATCH] C# template refactor (#737) * [csharp] Refactor to support third-party customization more easily * [csharp] Regenerate OpenAPIClient sample * create new csharp-refactor client gen * update samples * fix Locale.ROOT * fix import * remove outdated files, update samples --- bin/csharp-refactor-petstore-all.sh | 17 + bin/csharp-refactor-petstore.sh | 37 + .../CSharpRefactorClientCodegen.java | 850 ++++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../csharp-refactor/ApiClient.mustache | 555 ++++ .../csharp-refactor/ApiException.mustache | 52 + .../csharp-refactor/ApiResponse.mustache | 128 + .../csharp-refactor/AssemblyInfo.mustache | 40 + .../csharp-refactor/ClientUtils.mustache | 193 ++ .../csharp-refactor/Configuration.mustache | 395 +++ .../csharp-refactor/ExceptionFactory.mustache | 14 + .../resources/csharp-refactor/FodyWeavers.xml | 5 + .../GlobalConfiguration.mustache | 59 + .../csharp-refactor/HttpMethod.mustache | 18 + .../csharp-refactor/IApiAccessor.mustache | 29 + .../IAsynchronousClient.mustache | 87 + .../IReadableConfiguration.mustache | 85 + .../ISynchronousClient.mustache | 85 + .../JsonSubTypesTests.mustache | 125 + .../csharp-refactor/Multimap.mustache | 214 ++ .../OpenAPIDateConverter.mustache | 21 + .../csharp-refactor/Project.mustache | 119 + .../resources/csharp-refactor/README.mustache | 206 ++ .../ReadOnlyDictionary.mustache | 137 + .../csharp-refactor/RequestOptions.mustache | 66 + .../csharp-refactor/Solution.mustache | 27 + .../csharp-refactor/TestProject.mustache | 101 + .../resources/csharp-refactor/api.mustache | 480 +++ .../csharp-refactor/api_doc.mustache | 105 + .../csharp-refactor/api_test.mustache | 75 + .../csharp-refactor/compile-mono.sh.mustache | 78 + .../csharp-refactor/compile.mustache | 27 + .../csharp-refactor/enumClass.mustache | 20 + .../csharp-refactor/git_push.sh.mustache | 52 + .../csharp-refactor/gitignore.mustache | 186 ++ .../resources/csharp-refactor/model.mustache | 39 + .../csharp-refactor/modelEnum.mustache | 24 + .../csharp-refactor/modelGeneric.mustache | 306 ++ .../csharp-refactor/modelInnerEnum.mustache | 26 + .../csharp-refactor/model_doc.mustache | 19 + .../csharp-refactor/model_test.mustache | 90 + .../csharp-refactor/mono_nunit_test.mustache | 22 + .../csharp-refactor/netcore_project.mustache | 46 + .../netcore_testproject.mustache | 49 + .../resources/csharp-refactor/nuspec.mustache | 53 + .../csharp-refactor/packages.config.mustache | 10 + .../packages_test.config.mustache | 7 + .../csharp-refactor/partial_header.mustache | 13 + .../csharp-refactor/project.json.mustache | 12 + .../resources/csharp-refactor/travis.mustache | 9 + .../csharp-refactor/visibility.mustache | 1 + .../csharp-refactor/OpenAPIClient/.gitignore | 186 ++ .../OpenAPIClient/.openapi-generator-ignore | 23 + .../OpenAPIClient/.openapi-generator/VERSION | 1 + .../csharp-refactor/OpenAPIClient/.travis.yml | 9 + .../.vs/Org.OpenAPITools/xs/UserPrefs.xml | 10 + .../.vs/Org.OpenAPITools/xs/sqlite3/db.lock | 0 .../Org.OpenAPITools/xs/sqlite3/storage.ide | Bin 0 -> 421888 bytes .../xs/sqlite3/storage.ide-shm | Bin 0 -> 32768 bytes .../xs/sqlite3/storage.ide-wal | Bin 0 -> 4136512 bytes .../OpenAPIClient/Org.OpenAPITools.sln | 27 + .../csharp-refactor/OpenAPIClient/README.md | 208 ++ .../csharp-refactor/OpenAPIClient/build.bat | 17 + .../csharp-refactor/OpenAPIClient/build.sh | 68 + .../docs/AdditionalPropertiesClass.md | 10 + .../OpenAPIClient/docs/Animal.md | 10 + .../OpenAPIClient/docs/AnimalFarm.md | 8 + .../OpenAPIClient/docs/AnotherFakeApi.md | 70 + .../OpenAPIClient/docs/ApiResponse.md | 11 + .../docs/ArrayOfArrayOfNumberOnly.md | 9 + .../OpenAPIClient/docs/ArrayOfNumberOnly.md | 9 + .../OpenAPIClient/docs/ArrayTest.md | 11 + .../OpenAPIClient/docs/Capitalization.md | 14 + .../csharp-refactor/OpenAPIClient/docs/Cat.md | 11 + .../OpenAPIClient/docs/Category.md | 10 + .../OpenAPIClient/docs/ClassModel.md | 9 + .../csharp-refactor/OpenAPIClient/docs/Dog.md | 11 + .../OpenAPIClient/docs/EnumArrays.md | 10 + .../OpenAPIClient/docs/EnumClass.md | 8 + .../OpenAPIClient/docs/EnumTest.md | 13 + .../OpenAPIClient/docs/FakeApi.md | 791 +++++ .../docs/FakeClassnameTags123Api.md | 75 + .../OpenAPIClient/docs/File.md | 9 + .../OpenAPIClient/docs/FileSchemaTestClass.md | 10 + .../OpenAPIClient/docs/FormatTest.md | 21 + .../OpenAPIClient/docs/HasOnlyReadOnly.md | 10 + .../OpenAPIClient/docs/List.md | 9 + .../OpenAPIClient/docs/MapTest.md | 12 + ...dPropertiesAndAdditionalPropertiesClass.md | 11 + .../OpenAPIClient/docs/Model200Response.md | 10 + .../OpenAPIClient/docs/ModelClient.md | 9 + .../OpenAPIClient/docs/Name.md | 12 + .../OpenAPIClient/docs/NumberOnly.md | 9 + .../OpenAPIClient/docs/Order.md | 14 + .../OpenAPIClient/docs/OuterComposite.md | 11 + .../OpenAPIClient/docs/OuterEnum.md | 8 + .../csharp-refactor/OpenAPIClient/docs/Pet.md | 14 + .../OpenAPIClient/docs/PetApi.md | 593 ++++ .../OpenAPIClient/docs/ReadOnlyFirst.md | 10 + .../OpenAPIClient/docs/Return.md | 9 + .../OpenAPIClient/docs/SpecialModelName.md | 9 + .../OpenAPIClient/docs/StoreApi.md | 254 ++ .../OpenAPIClient/docs/StringBooleanMap.md | 8 + .../csharp-refactor/OpenAPIClient/docs/Tag.md | 10 + .../OpenAPIClient/docs/User.md | 16 + .../OpenAPIClient/docs/UserApi.md | 488 ++++ .../csharp-refactor/OpenAPIClient/git_push.sh | 52 + .../OpenAPIClient/mono_nunit_test.sh | 22 + .../Api/AnotherFakeApiTests.cs | 81 + .../Org.OpenAPITools.Test/Api/FakeApiTests.cs | 223 ++ .../Api/FakeClassnameTags123ApiTests.cs | 81 + .../Org.OpenAPITools.Test/Api/PetApiTests.cs | 184 ++ .../Api/StoreApiTests.cs | 116 + .../Org.OpenAPITools.Test/Api/UserApiTests.cs | 166 ++ .../Model/AdditionalPropertiesClassTests.cs | 88 + .../Model/AnimalFarmTests.cs | 72 + .../Model/AnimalTests.cs | 106 + .../Model/ApiResponseTests.cs | 96 + .../Model/ArrayOfArrayOfNumberOnlyTests.cs | 80 + .../Model/ArrayOfNumberOnlyTests.cs | 80 + .../Model/ArrayTestTests.cs | 96 + .../Model/CapitalizationTests.cs | 120 + .../Org.OpenAPITools.Test/Model/CatTests.cs | 80 + .../Model/CategoryTests.cs | 88 + .../Model/ClassModelTests.cs | 80 + .../Org.OpenAPITools.Test/Model/DogTests.cs | 80 + .../Model/EnumArraysTests.cs | 88 + .../Model/EnumClassTests.cs | 72 + .../Model/EnumTestTests.cs | 112 + .../Model/FileSchemaTestClassTests.cs | 88 + .../Org.OpenAPITools.Test/Model/FileTests.cs | 80 + .../Model/FormatTestTests.cs | 176 ++ .../Model/HasOnlyReadOnlyTests.cs | 88 + .../Org.OpenAPITools.Test/Model/ListTests.cs | 80 + .../Model/MapTestTests.cs | 104 + ...ertiesAndAdditionalPropertiesClassTests.cs | 96 + .../Model/Model200ResponseTests.cs | 88 + .../Model/ModelClientTests.cs | 80 + .../Org.OpenAPITools.Test/Model/NameTests.cs | 104 + .../Model/NumberOnlyTests.cs | 80 + .../Org.OpenAPITools.Test/Model/OrderTests.cs | 120 + .../Model/OuterCompositeTests.cs | 96 + .../Model/OuterEnumTests.cs | 72 + .../Org.OpenAPITools.Test/Model/PetTests.cs | 120 + .../Model/ReadOnlyFirstTests.cs | 88 + .../Model/ReturnTests.cs | 80 + .../Model/SpecialModelNameTests.cs | 80 + .../Model/StringBooleanMapTests.cs | 72 + .../Org.OpenAPITools.Test/Model/TagTests.cs | 88 + .../Org.OpenAPITools.Test/Model/UserTests.cs | 136 + .../Org.OpenAPITools.Test.csproj | 89 + .../src/Org.OpenAPITools.Test/packages.config | 7 + .../Org.OpenAPITools/Api/AnotherFakeApi.cs | 314 ++ .../src/Org.OpenAPITools/Api/FakeApi.cs | 2575 +++++++++++++++++ .../Api/FakeClassnameTags123Api.cs | 336 +++ .../src/Org.OpenAPITools/Api/PetApi.cs | 1822 ++++++++++++ .../src/Org.OpenAPITools/Api/StoreApi.cs | 775 +++++ .../src/Org.OpenAPITools/Api/UserApi.cs | 1435 +++++++++ .../src/Org.OpenAPITools/Client/ApiClient.cs | 503 ++++ .../Org.OpenAPITools/Client/ApiException.cs | 61 + .../Org.OpenAPITools/Client/ApiResponse.cs | 137 + .../Org.OpenAPITools/Client/ClientUtils.cs | 197 ++ .../Org.OpenAPITools/Client/Configuration.cs | 395 +++ .../Client/ExceptionFactory.cs | 23 + .../Client/GlobalConfiguration.cs | 68 + .../src/Org.OpenAPITools/Client/HttpMethod.cs | 27 + .../Org.OpenAPITools/Client/IApiAccessor.cs | 38 + .../Client/IAsynchronousClient.cs | 96 + .../Client/IReadableConfiguration.cs | 94 + .../Client/ISynchronousClient.cs | 94 + .../src/Org.OpenAPITools/Client/Multimap.cs | 196 ++ .../Client/OpenAPIDateConverter.cs | 30 + .../Org.OpenAPITools/Client/RequestOptions.cs | 75 + .../Model/AdditionalPropertiesClass.cs | 141 + .../src/Org.OpenAPITools/Model/Animal.cs | 176 ++ .../src/Org.OpenAPITools/Model/AnimalFarm.cs | 111 + .../src/Org.OpenAPITools/Model/ApiResponse.cs | 157 + .../Model/ArrayOfArrayOfNumberOnly.cs | 125 + .../Model/ArrayOfNumberOnly.cs | 125 + .../src/Org.OpenAPITools/Model/ArrayTest.cs | 157 + .../Org.OpenAPITools/Model/Capitalization.cs | 206 ++ .../src/Org.OpenAPITools/Model/Cat.cs | 132 + .../src/Org.OpenAPITools/Model/Category.cs | 154 + .../src/Org.OpenAPITools/Model/ClassModel.cs | 125 + .../src/Org.OpenAPITools/Model/Dog.cs | 132 + .../src/Org.OpenAPITools/Model/EnumArrays.cs | 182 ++ .../src/Org.OpenAPITools/Model/EnumClass.cs | 56 + .../src/Org.OpenAPITools/Model/EnumTest.cs | 291 ++ .../src/Org.OpenAPITools/Model/File.cs | 126 + .../Model/FileSchemaTestClass.cs | 141 + .../src/Org.OpenAPITools/Model/FormatTest.cs | 434 +++ .../Org.OpenAPITools/Model/HasOnlyReadOnly.cs | 138 + .../src/Org.OpenAPITools/Model/List.cs | 125 + .../src/Org.OpenAPITools/Model/MapTest.cs | 194 ++ ...dPropertiesAndAdditionalPropertiesClass.cs | 157 + .../Model/Model200Response.cs | 141 + .../src/Org.OpenAPITools/Model/ModelClient.cs | 125 + .../src/Org.OpenAPITools/Model/Name.cs | 182 ++ .../src/Org.OpenAPITools/Model/NumberOnly.cs | 125 + .../src/Org.OpenAPITools/Model/Order.cs | 241 ++ .../Org.OpenAPITools/Model/OuterComposite.cs | 157 + .../src/Org.OpenAPITools/Model/OuterEnum.cs | 56 + .../src/Org.OpenAPITools/Model/Pet.cs | 254 ++ .../Org.OpenAPITools/Model/ReadOnlyFirst.cs | 139 + .../src/Org.OpenAPITools/Model/Return.cs | 125 + .../Model/SpecialModelName.cs | 125 + .../Model/StringBooleanMap.cs | 111 + .../src/Org.OpenAPITools/Model/Tag.cs | 141 + .../src/Org.OpenAPITools/Model/User.cs | 238 ++ .../Org.OpenAPITools/Org.OpenAPITools.csproj | 78 + .../Org.OpenAPITools/Org.OpenAPITools.nuspec | 41 + .../Properties/AssemblyInfo.cs | 33 + .../src/Org.OpenAPITools/packages.config | 6 + 213 files changed, 28189 insertions(+) create mode 100755 bin/csharp-refactor-petstore-all.sh create mode 100755 bin/csharp-refactor-petstore.sh create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpRefactorClientCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/ApiClient.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/ApiException.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/ApiResponse.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/AssemblyInfo.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/ClientUtils.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/Configuration.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/ExceptionFactory.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/FodyWeavers.xml create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/GlobalConfiguration.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/HttpMethod.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/IApiAccessor.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/IAsynchronousClient.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/IReadableConfiguration.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/ISynchronousClient.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/JsonSubTypesTests.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/Multimap.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/OpenAPIDateConverter.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/Project.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/ReadOnlyDictionary.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/RequestOptions.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/Solution.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/TestProject.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/api.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/api_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/api_test.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/compile-mono.sh.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/compile.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/enumClass.mustache create mode 100755 modules/openapi-generator/src/main/resources/csharp-refactor/git_push.sh.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/gitignore.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/model.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/modelEnum.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/modelGeneric.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/modelInnerEnum.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/model_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/model_test.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/mono_nunit_test.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/netcore_project.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/netcore_testproject.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/nuspec.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/packages.config.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/packages_test.config.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/partial_header.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/project.json.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/travis.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-refactor/visibility.mustache create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.gitignore create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator-ignore create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator/VERSION create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.travis.yml create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/UserPrefs.xml create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/db.lock create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-shm create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-wal create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/Org.OpenAPITools.sln create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/README.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/build.bat create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/build.sh create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AdditionalPropertiesClass.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Animal.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnimalFarm.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnotherFakeApi.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ApiResponse.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfArrayOfNumberOnly.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfNumberOnly.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayTest.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Capitalization.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Cat.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Category.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ClassModel.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Dog.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumArrays.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumClass.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumTest.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeApi.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeClassnameTags123Api.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/File.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FileSchemaTestClass.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FormatTest.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/HasOnlyReadOnly.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/List.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MapTest.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MixedPropertiesAndAdditionalPropertiesClass.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Model200Response.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ModelClient.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Name.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/NumberOnly.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Order.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterComposite.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterEnum.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Pet.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/PetApi.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ReadOnlyFirst.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Return.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/SpecialModelName.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StoreApi.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StringBooleanMap.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Tag.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/User.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/docs/UserApi.md create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/git_push.sh create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/mono_nunit_test.sh create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/AnotherFakeApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeClassnameTags123ApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/StoreApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/UserApiTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AdditionalPropertiesClassTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalFarmTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ApiResponseTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfArrayOfNumberOnlyTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfNumberOnlyTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayTestTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CapitalizationTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CatTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CategoryTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ClassModelTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/DogTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumArraysTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumClassTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumTestTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileSchemaTestClassTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FormatTestTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/HasOnlyReadOnlyTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ListTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MapTestTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MixedPropertiesAndAdditionalPropertiesClassTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/Model200ResponseTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ModelClientTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NameTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NumberOnlyTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OrderTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterCompositeTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterEnumTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/PetTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReadOnlyFirstTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReturnTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/SpecialModelNameTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/StringBooleanMapTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/TagTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/UserTests.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/packages.config create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/PetApi.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/StoreApi.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/UserApi.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiException.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiResponse.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ClientUtils.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Configuration.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ExceptionFactory.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/GlobalConfiguration.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/HttpMethod.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IApiAccessor.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IAsynchronousClient.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IReadableConfiguration.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ISynchronousClient.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/OpenAPIDateConverter.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/RequestOptions.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Animal.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AnimalFarm.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ApiResponse.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayTest.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Capitalization.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Cat.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Category.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ClassModel.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Dog.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumArrays.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumClass.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumTest.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/File.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FormatTest.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/List.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MapTest.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Model200Response.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ModelClient.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Name.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/NumberOnly.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Order.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterComposite.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterEnum.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Pet.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Return.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/SpecialModelName.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/StringBooleanMap.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Tag.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/User.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.csproj create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.nuspec create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Properties/AssemblyInfo.cs create mode 100644 samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/packages.config diff --git a/bin/csharp-refactor-petstore-all.sh b/bin/csharp-refactor-petstore-all.sh new file mode 100755 index 0000000000..635a8d7220 --- /dev/null +++ b/bin/csharp-refactor-petstore-all.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# C# Petstore API client (.NET 3.5) +./bin/csharp-refactor-petstore.sh + +# C# Petstore API client with PropertyChanged +./bin/csharp-refactor-property-changed-petstore.sh + +# C# Petstore API client (v5.0 for .net standarnd 1.3+) +./bin/csharp-refactor-petstore-net-standard.sh + +# C# Petstore API client (.NET 4.0) +./bin/csharp-refactor-petstore-net-40.sh + +# C# Petstore API client (.NET 3.5) +./bin/csharp-refactor-petstore-net-35.sh + diff --git a/bin/csharp-refactor-petstore.sh b/bin/csharp-refactor-petstore.sh new file mode 100755 index 0000000000..e27a941431 --- /dev/null +++ b/bin/csharp-refactor-petstore.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +SCRIPT="$0" +echo "# START SCRIPT: $SCRIPT" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn -B clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g csharp-refactor -o samples/client/petstore/csharp-refactor/OpenAPIClient --additional-properties packageGuid={321C8C3F-0156-40C1-AE42-D59761FB9B6C} $@" + +java $JAVA_OPTS -jar $executable $ags + +# restore csproj file +#echo "restore csproject file: CI/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj" +#cp ./CI/samples.ci/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj ./samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/ + diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpRefactorClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpRefactorClientCodegen.java new file mode 100644 index 0000000000..71d6bb7bf4 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpRefactorClientCodegen.java @@ -0,0 +1,850 @@ +/* + * 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 + * + * http://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 static org.apache.commons.lang3.StringUtils.isEmpty; + +import com.google.common.collect.ImmutableMap; +import com.samskivert.mustache.Mustache; + +import io.swagger.v3.oas.models.media.Schema; + +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenConstants; +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.SupportingFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +public class CSharpRefactorClientCodegen extends AbstractCSharpCodegen { + @SuppressWarnings({"hiding"}) + private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); + private static final String NET45 = "v4.5"; + private static final String NET40 = "v4.0"; + private static final String NET35 = "v3.5"; + // TODO: v5.0 is PCL, not netstandard version 1.3, and not a specific .NET Framework. This needs to be updated, + // especially because it will conflict with .NET Framework 5.0 when released, and PCL 5 refers to Framework 4.0. + // We should support either NETSTANDARD, PCL, or Both… but the concepts shouldn't be mixed. + private static final String NETSTANDARD = "v5.0"; + private static final String UWP = "uwp"; + + // Defines the sdk option for targeted frameworks, which differs from targetFramework and targetFrameworkNuget + private static final String MCS_NET_VERSION_KEY = "x-mcs-sdk"; + + protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase(Locale.ROOT) + "}"; + protected String clientPackage = "Org.OpenAPITools.Client"; + protected String localVariablePrefix = ""; + protected String apiDocPath = "docs/"; + protected String modelDocPath = "docs/"; + + // Defines TargetFrameworkVersion in csproj files + protected String targetFramework = NET45; + + // Defines nuget identifiers for target framework + protected String targetFrameworkNuget = "net45"; + protected boolean supportsAsync = Boolean.TRUE; + protected boolean supportsUWP = Boolean.FALSE; + protected boolean netStandard = Boolean.FALSE; + protected boolean generatePropertyChanged = Boolean.FALSE; + + protected boolean validatable = Boolean.TRUE; + protected Map regexModifiers; + protected final Map frameworks; + + // By default, generated code is considered public + protected boolean nonPublicApi = Boolean.FALSE; + + public CSharpRefactorClientCodegen() { + super(); + supportsInheritance = true; + modelTemplateFiles.put("model.mustache", ".cs"); + apiTemplateFiles.put("api.mustache", ".cs"); + + modelDocTemplateFiles.put("model_doc.mustache", ".md"); + apiDocTemplateFiles.put("api_doc.mustache", ".md"); + + embeddedTemplateDir = templateDir = "csharp-refactor"; + + hideGenerationTimestamp = Boolean.TRUE; + + cliOptions.clear(); + + // CLI options + addOption(CodegenConstants.PACKAGE_NAME, + "C# package name (convention: Title.Case).", + this.packageName); + + addOption(CodegenConstants.PACKAGE_VERSION, + "C# package version.", + this.packageVersion); + + addOption(CodegenConstants.SOURCE_FOLDER, + CodegenConstants.SOURCE_FOLDER_DESC, + sourceFolder); + + addOption(CodegenConstants.OPTIONAL_PROJECT_GUID, + CodegenConstants.OPTIONAL_PROJECT_GUID_DESC, + null); + + addOption(CodegenConstants.INTERFACE_PREFIX, + CodegenConstants.INTERFACE_PREFIX_DESC, + interfacePrefix); + + CliOption framework = new CliOption( + CodegenConstants.DOTNET_FRAMEWORK, + CodegenConstants.DOTNET_FRAMEWORK_DESC + ); + frameworks = new ImmutableMap.Builder() + .put(NET35, ".NET Framework 3.5 compatible") + .put(NET40, ".NET Framework 4.0 compatible") + .put(NET45, ".NET Framework 4.5+ compatible") + .put(NETSTANDARD, ".NET Standard 1.3 compatible") + .put(UWP, "Universal Windows Platform (IMPORTANT: this will be decommissioned and replaced by v5.0)") + .build(); + framework.defaultValue(this.targetFramework); + framework.setEnum(frameworks); + cliOptions.add(framework); + + CliOption modelPropertyNaming = new CliOption(CodegenConstants.MODEL_PROPERTY_NAMING, CodegenConstants.MODEL_PROPERTY_NAMING_DESC); + cliOptions.add(modelPropertyNaming.defaultValue("PascalCase")); + + // CLI Switches + addSwitch(CodegenConstants.HIDE_GENERATION_TIMESTAMP, + CodegenConstants.HIDE_GENERATION_TIMESTAMP_DESC, + this.hideGenerationTimestamp); + + addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, + CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC, + this.sortParamsByRequiredFlag); + + addSwitch(CodegenConstants.USE_DATETIME_OFFSET, + CodegenConstants.USE_DATETIME_OFFSET_DESC, + this.useDateTimeOffsetFlag); + + addSwitch(CodegenConstants.USE_COLLECTION, + CodegenConstants.USE_COLLECTION_DESC, + this.useCollection); + + addSwitch(CodegenConstants.RETURN_ICOLLECTION, + CodegenConstants.RETURN_ICOLLECTION_DESC, + this.returnICollection); + + addSwitch(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, + "C# Optional method argument, e.g. void square(int x=10) (.net 4.0+ only).", + this.optionalMethodArgumentFlag); + + addSwitch(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, + CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC, + this.optionalAssemblyInfoFlag); + + addSwitch(CodegenConstants.OPTIONAL_PROJECT_FILE, + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC, + this.optionalProjectFileFlag); + + addSwitch(CodegenConstants.OPTIONAL_EMIT_DEFAULT_VALUES, + CodegenConstants.OPTIONAL_EMIT_DEFAULT_VALUES_DESC, + this.optionalEmitDefaultValue); + + addSwitch(CodegenConstants.GENERATE_PROPERTY_CHANGED, + CodegenConstants.PACKAGE_DESCRIPTION_DESC, + this.generatePropertyChanged); + + // NOTE: This will reduce visibility of all public members in templates. Users can use InternalsVisibleTo + // https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx + // to expose to shared code if the generated code is not embedded into another project. Otherwise, users of codegen + // should rely on default public visibility. + addSwitch(CodegenConstants.NON_PUBLIC_API, + CodegenConstants.NON_PUBLIC_API_DESC, + this.nonPublicApi); + + addSwitch(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, + CodegenConstants.ALLOW_UNICODE_IDENTIFIERS_DESC, + this.allowUnicodeIdentifiers); + + addSwitch(CodegenConstants.NETCORE_PROJECT_FILE, + CodegenConstants.NETCORE_PROJECT_FILE_DESC, + this.netCoreProjectFileFlag); + + addSwitch(CodegenConstants.VALIDATABLE, + CodegenConstants.VALIDATABLE_DESC, + this.validatable); + + regexModifiers = new HashMap(); + regexModifiers.put('i', "IgnoreCase"); + regexModifiers.put('m', "Multiline"); + regexModifiers.put('s', "Singleline"); + regexModifiers.put('x', "IgnorePatternWhitespace"); + } + + @Override + public void processOpts() { + super.processOpts(); + + /* + * NOTE: When supporting boolean additionalProperties, you should read the value and write it back as a boolean. + * This avoids oddities where additionalProperties contains "false" rather than false, which will cause the + * templating engine to behave unexpectedly. + * + * Use the pattern: + * if (additionalProperties.containsKey(prop)) convertPropertyToBooleanAndWriteBack(prop); + */ + + if (additionalProperties.containsKey(CodegenConstants.MODEL_PROPERTY_NAMING)) { + setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING)); + } + + + if (isEmpty(apiPackage)) { + setApiPackage("Api"); + } + if (isEmpty(modelPackage)) { + setModelPackage("Model"); + } + clientPackage = "Client"; + + Boolean excludeTests = false; + if (additionalProperties.containsKey(CodegenConstants.EXCLUDE_TESTS)) { + excludeTests = convertPropertyToBooleanAndWriteBack(CodegenConstants.EXCLUDE_TESTS); + } + + if (additionalProperties.containsKey(CodegenConstants.VALIDATABLE)) { + setValidatable(convertPropertyToBooleanAndWriteBack(CodegenConstants.VALIDATABLE)); + } else { + additionalProperties.put(CodegenConstants.VALIDATABLE, validatable); + } + + if (additionalProperties.containsKey(CodegenConstants.DOTNET_FRAMEWORK)) { + setTargetFramework((String) additionalProperties.get(CodegenConstants.DOTNET_FRAMEWORK)); + } else { + // Ensure default is set. + setTargetFramework(NET45); + additionalProperties.put(CodegenConstants.DOTNET_FRAMEWORK, this.targetFramework); + } + + if (NET35.equals(this.targetFramework)) { + // This is correct, mono will require you build .NET 3.5 sources using 4.0 SDK + additionalProperties.put(MCS_NET_VERSION_KEY, "4"); + additionalProperties.put("net35", true); + if (additionalProperties.containsKey(CodegenConstants.SUPPORTS_ASYNC)) { + LOGGER.warn(".NET 3.5 generator does not support async."); + additionalProperties.remove(CodegenConstants.SUPPORTS_ASYNC); + } + + setTargetFrameworkNuget("net35"); + setValidatable(Boolean.FALSE); + setSupportsAsync(Boolean.FALSE); + } else if (NETSTANDARD.equals(this.targetFramework)) { + // TODO: NETSTANDARD here is misrepresenting a PCL v5.0 which supports .NET Framework 4.6+, .NET Core 1.0, and Windows Universal 10.0 + additionalProperties.put(MCS_NET_VERSION_KEY, "4.6-api"); + if (additionalProperties.containsKey("supportsUWP")) { + LOGGER.warn(".NET " + NETSTANDARD + " generator does not support UWP."); + additionalProperties.remove("supportsUWP"); + } + + // TODO: NETSTANDARD=v5.0 and targetFrameworkNuget=netstandard1.3. These need to sync. + setTargetFrameworkNuget("netstandard1.3"); + setSupportsAsync(Boolean.TRUE); + setSupportsUWP(Boolean.FALSE); + setNetStandard(Boolean.TRUE); + + //Tests not yet implemented for .NET Standard codegen + //Todo implement it + excludeTests = true; + } else if (UWP.equals(this.targetFramework)) { + setTargetFrameworkNuget("uwp"); + setSupportsAsync(Boolean.TRUE); + setSupportsUWP(Boolean.TRUE); + } else if (NET40.equals(this.targetFramework)) { + additionalProperties.put(MCS_NET_VERSION_KEY, "4"); + additionalProperties.put("isNet40", true); + + if (additionalProperties.containsKey(CodegenConstants.SUPPORTS_ASYNC)) { + LOGGER.warn(".NET " + NET40 + " generator does not support async."); + additionalProperties.remove(CodegenConstants.SUPPORTS_ASYNC); + } + + setTargetFrameworkNuget("net40"); + setSupportsAsync(Boolean.FALSE); + } else { + additionalProperties.put(MCS_NET_VERSION_KEY, "4.5.2-api"); + setTargetFrameworkNuget("net45"); + setSupportsAsync(Boolean.TRUE); + } + + if (additionalProperties.containsKey(CodegenConstants.GENERATE_PROPERTY_CHANGED)) { + if (NET35.equals(targetFramework)) { + LOGGER.warn(CodegenConstants.GENERATE_PROPERTY_CHANGED + " is only supported by generated code for .NET 4+."); + additionalProperties.remove(CodegenConstants.GENERATE_PROPERTY_CHANGED); + } else if (NETSTANDARD.equals(targetFramework)) { + LOGGER.warn(CodegenConstants.GENERATE_PROPERTY_CHANGED + " is not supported in .NET Standard generated code."); + additionalProperties.remove(CodegenConstants.GENERATE_PROPERTY_CHANGED); + } else if (Boolean.TRUE.equals(netCoreProjectFileFlag)) { + LOGGER.warn(CodegenConstants.GENERATE_PROPERTY_CHANGED + " is not supported in .NET Core csproj project format."); + additionalProperties.remove(CodegenConstants.GENERATE_PROPERTY_CHANGED); + } else { + setGeneratePropertyChanged(convertPropertyToBooleanAndWriteBack(CodegenConstants.GENERATE_PROPERTY_CHANGED)); + } + } + + additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage); + additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage); + additionalProperties.put("clientPackage", clientPackage); + + additionalProperties.put(CodegenConstants.EXCLUDE_TESTS, excludeTests); + additionalProperties.put(CodegenConstants.VALIDATABLE, this.validatable); + additionalProperties.put(CodegenConstants.SUPPORTS_ASYNC, this.supportsAsync); + additionalProperties.put("supportsUWP", this.supportsUWP); + additionalProperties.put("netStandard", this.netStandard); + additionalProperties.put("targetFrameworkNuget", this.targetFrameworkNuget); + + // TODO: either remove this and update templates to match the "optionalEmitDefaultValues" property, or rename that property. + additionalProperties.put("emitDefaultValue", optionalEmitDefaultValue); + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) { + setOptionalProjectFileFlag(convertPropertyToBooleanAndWriteBack(CodegenConstants.OPTIONAL_PROJECT_FILE)); + } else { + additionalProperties.put(CodegenConstants.OPTIONAL_PROJECT_FILE, optionalProjectFileFlag); + } + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) { + setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); + } else { + additionalProperties.put(CodegenConstants.OPTIONAL_PROJECT_GUID, packageGuid); + } + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) { + setOptionalMethodArgumentFlag(convertPropertyToBooleanAndWriteBack(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)); + } else { + additionalProperties.put(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, optionalMethodArgumentFlag); + } + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_ASSEMBLY_INFO)) { + setOptionalAssemblyInfoFlag(convertPropertyToBooleanAndWriteBack(CodegenConstants.OPTIONAL_ASSEMBLY_INFO)); + } else { + additionalProperties.put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, optionalAssemblyInfoFlag); + } + + if (additionalProperties.containsKey(CodegenConstants.NON_PUBLIC_API)) { + setNonPublicApi(convertPropertyToBooleanAndWriteBack(CodegenConstants.NON_PUBLIC_API)); + } else { + additionalProperties.put(CodegenConstants.NON_PUBLIC_API, isNonPublicApi()); + } + + final String testPackageName = testPackageName(); + String packageFolder = sourceFolder + File.separator + packageName; + String clientPackageDir = packageFolder + File.separator + clientPackage; + String testPackageFolder = testFolder + File.separator + testPackageName; + + additionalProperties.put("testPackageName", testPackageName); + + //Compute the relative path to the bin directory where the external assemblies live + //This is necessary to properly generate the project file + int packageDepth = packageFolder.length() - packageFolder.replace(java.io.File.separator, "").length(); + String binRelativePath = "..\\"; + for (int i = 0; i < packageDepth; i = i + 1) + binRelativePath += "..\\"; + binRelativePath += "vendor"; + additionalProperties.put("binRelativePath", binRelativePath); + + 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")); + supportingFiles.add(new SupportingFile("ApiException.mustache", + clientPackageDir, "ApiException.cs")); + supportingFiles.add(new SupportingFile("ApiResponse.mustache", + clientPackageDir, "ApiResponse.cs")); + supportingFiles.add(new SupportingFile("ExceptionFactory.mustache", + clientPackageDir, "ExceptionFactory.cs")); + supportingFiles.add(new SupportingFile("OpenAPIDateConverter.mustache", + clientPackageDir, "OpenAPIDateConverter.cs")); + + supportingFiles.add(new SupportingFile("ClientUtils.mustache", + clientPackageDir, "ClientUtils.cs")); + supportingFiles.add(new SupportingFile("HttpMethod.mustache", + clientPackageDir, "HttpMethod.cs")); + supportingFiles.add(new SupportingFile("IAsynchronousClient.mustache", + clientPackageDir, "IAsynchronousClient.cs")); + supportingFiles.add(new SupportingFile("ISynchronousClient.mustache", + clientPackageDir, "ISynchronousClient.cs")); + supportingFiles.add(new SupportingFile("RequestOptions.mustache", + clientPackageDir, "RequestOptions.cs")); + supportingFiles.add(new SupportingFile("Multimap.mustache", + clientPackageDir, "Multimap.cs")); + + if (Boolean.FALSE.equals(this.netStandard) && Boolean.FALSE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("compile.mustache", "", "build.bat")); + supportingFiles.add(new SupportingFile("compile-mono.sh.mustache", "", "build.sh")); + + // copy package.config to nuget's standard location for project-level installs + supportingFiles.add(new SupportingFile("packages.config.mustache", packageFolder + File.separator, "packages.config")); + // .travis.yml for travis-ci.org CI + supportingFiles.add(new SupportingFile("travis.mustache", "", ".travis.yml")); + } else if (Boolean.FALSE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("project.json.mustache", packageFolder + File.separator, "project.json")); + } + + supportingFiles.add(new SupportingFile("IReadableConfiguration.mustache", + clientPackageDir, "IReadableConfiguration.cs")); + supportingFiles.add(new SupportingFile("GlobalConfiguration.mustache", + clientPackageDir, "GlobalConfiguration.cs")); + + // Only write out test related files if excludeTests is unset or explicitly set to false (see start of this method) + if (Boolean.FALSE.equals(excludeTests)) { + // shell script to run the nunit test + supportingFiles.add(new SupportingFile("mono_nunit_test.mustache", "", "mono_nunit_test.sh")); + + modelTestTemplateFiles.put("model_test.mustache", ".cs"); + apiTestTemplateFiles.put("api_test.mustache", ".cs"); + + if (Boolean.FALSE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("packages_test.config.mustache", testPackageFolder + File.separator, "packages.config")); + } + + if (NET40.equals(this.targetFramework)) { + // Include minimal tests for modifications made to JsonSubTypes, since code is quite different for .net 4.0 from original implementation + supportingFiles.add(new SupportingFile("JsonSubTypesTests.mustache", + testPackageFolder + File.separator + "Client", + "JsonSubTypesTests.cs")); + } + } + + if (Boolean.TRUE.equals(generatePropertyChanged)) { + supportingFiles.add(new SupportingFile("FodyWeavers.xml", packageFolder, "FodyWeavers.xml")); + } + + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); + supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); + + if (optionalAssemblyInfoFlag && Boolean.FALSE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", packageFolder + File.separator + "Properties", "AssemblyInfo.cs")); + } + if (optionalProjectFileFlag) { + supportingFiles.add(new SupportingFile("Solution.mustache", "", packageName + ".sln")); + + if (Boolean.TRUE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("netcore_project.mustache", packageFolder, packageName + ".csproj")); + } else { + supportingFiles.add(new SupportingFile("Project.mustache", packageFolder, packageName + ".csproj")); + if (Boolean.FALSE.equals(this.netStandard)) { + supportingFiles.add(new SupportingFile("nuspec.mustache", packageFolder, packageName + ".nuspec")); + } + } + + if (Boolean.FALSE.equals(excludeTests)) { + // NOTE: This exists here rather than previous excludeTests block because the test project is considered an optional project file. + if (Boolean.TRUE.equals(this.netCoreProjectFileFlag)) { + supportingFiles.add(new SupportingFile("netcore_testproject.mustache", testPackageFolder, testPackageName + ".csproj")); + } else { + supportingFiles.add(new SupportingFile("TestProject.mustache", testPackageFolder, testPackageName + ".csproj")); + } + } + } + + additionalProperties.put("apiDocPath", apiDocPath); + additionalProperties.put("modelDocPath", modelDocPath); + } + + public void setModelPropertyNaming(String naming) { + if ("original".equals(naming) || "camelCase".equals(naming) || + "PascalCase".equals(naming) || "snake_case".equals(naming)) { + this.modelPropertyNaming = naming; + } else { + throw new IllegalArgumentException("Invalid model property naming '" + + naming + "'. Must be 'original', 'camelCase', " + + "'PascalCase' or 'snake_case'"); + } + } + + public String getModelPropertyNaming() { + return this.modelPropertyNaming; + } + + @Override + public Map postProcessOperationsWithModels(Map objs, List allModels) { + super.postProcessOperationsWithModels(objs, allModels); + if (objs != null) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + if (operation.returnType != null) { + operation.returnContainer = operation.returnType; + if (this.returnICollection && ( + operation.returnType.startsWith("List") || + operation.returnType.startsWith("Collection"))) { + // NOTE: ICollection works for both List and Collection + int genericStart = operation.returnType.indexOf("<"); + if (genericStart > 0) { + operation.returnType = "ICollection" + operation.returnType.substring(genericStart); + } + } + } + } + } + } + + return objs; + } + + @Override + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + @Override + public String getName() { + return "csharp-refactor"; + } + + @Override + public String getHelp() { + return "Generates a CSharp client library."; + } + + public void setOptionalAssemblyInfoFlag(boolean flag) { + this.optionalAssemblyInfoFlag = flag; + } + + @Override + public CodegenModel fromModel(String name, Schema model, Map allDefinitions) { + CodegenModel codegenModel = super.fromModel(name, model, allDefinitions); + if (allDefinitions != null && codegenModel != null && codegenModel.parent != null) { + final Schema parentModel = allDefinitions.get(toModelName(codegenModel.parent)); + if (parentModel != null) { + final CodegenModel parentCodegenModel = super.fromModel(codegenModel.parent, parentModel, allDefinitions); + if (codegenModel.hasEnums) { + codegenModel = this.reconcileInlineEnums(codegenModel, parentCodegenModel); + } + + Map propertyHash = new HashMap<>(codegenModel.vars.size()); + for (final CodegenProperty property : codegenModel.vars) { + propertyHash.put(property.name, property); + } + + for (final CodegenProperty property : codegenModel.readWriteVars) { + if (property.defaultValue == null && property.baseName.equals(parentCodegenModel.discriminator)) { + property.defaultValue = "\"" + name + "\""; + } + } + + CodegenProperty last = null; + for (final CodegenProperty property : parentCodegenModel.vars) { + // helper list of parentVars simplifies templating + if (!propertyHash.containsKey(property.name)) { + final CodegenProperty parentVar = property.clone(); + parentVar.isInherited = true; + parentVar.hasMore = true; + last = parentVar; + LOGGER.info("adding parent variable {}", property.name); + codegenModel.parentVars.add(parentVar); + } + } + + if (last != null) { + last.hasMore = false; + } + } + } + + // Cleanup possible duplicates. Currently, readWriteVars can contain the same property twice. May or may not be isolated to C#. + if (codegenModel != null && codegenModel.readWriteVars != null && codegenModel.readWriteVars.size() > 1) { + int length = codegenModel.readWriteVars.size() - 1; + for (int i = length; i > (length / 2); i--) { + final CodegenProperty codegenProperty = codegenModel.readWriteVars.get(i); + // If the property at current index is found earlier in the list, remove this last instance. + if (codegenModel.readWriteVars.indexOf(codegenProperty) < i) { + codegenModel.readWriteVars.remove(i); + } + } + } + + return codegenModel; + } + + public void setOptionalProjectFileFlag(boolean flag) { + this.optionalProjectFileFlag = flag; + } + + public void setPackageGuid(String packageGuid) { + this.packageGuid = packageGuid; + } + + @Override + public void postProcessParameter(CodegenParameter parameter) { + postProcessPattern(parameter.pattern, parameter.vendorExtensions); + super.postProcessParameter(parameter); + } + + @Override + public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { + postProcessPattern(property.pattern, property.vendorExtensions); + super.postProcessModelProperty(model, property); + } + + /* + * The pattern spec follows the Perl convention and style of modifiers. .NET + * does not support this syntax directly so we need to convert the pattern to a .NET compatible + * format and apply modifiers in a compatible way. + * See https://msdn.microsoft.com/en-us/library/yd1hzczs(v=vs.110).aspx for .NET options. + */ + public void postProcessPattern(String pattern, Map vendorExtensions) { + if (pattern != null) { + int i = pattern.lastIndexOf('/'); + + //Must follow Perl /pattern/modifiers convention + if (pattern.charAt(0) != '/' || i < 2) { + throw new IllegalArgumentException("Pattern must follow the Perl " + + "/pattern/modifiers convention. " + pattern + " is not valid."); + } + + String regex = pattern.substring(1, i).replace("'", "\'"); + List modifiers = new ArrayList(); + + // perl requires an explicit modifier to be culture specific and .NET is the reverse. + modifiers.add("CultureInvariant"); + + for (char c : pattern.substring(i).toCharArray()) { + if (regexModifiers.containsKey(c)) { + String modifier = regexModifiers.get(c); + modifiers.add(modifier); + } else if (c == 'l') { + modifiers.remove("CultureInvariant"); + } + } + + vendorExtensions.put("x-regex", regex); + vendorExtensions.put("x-modifiers", modifiers); + } + } + + public void setTargetFramework(String dotnetFramework) { + if (!frameworks.containsKey(dotnetFramework)) { + LOGGER.warn("Invalid .NET framework version, defaulting to " + this.targetFramework); + } else { + this.targetFramework = dotnetFramework; + } + LOGGER.info("Generating code for .NET Framework " + this.targetFramework); + } + + private CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) { + // This generator uses inline classes to define enums, which breaks when + // dealing with models that have subTypes. To clean this up, we will analyze + // the parent and child models, look for enums that match, and remove + // them from the child models and leave them in the parent. + // Because the child models extend the parents, the enums will be available via the parent. + + // Only bother with reconciliation if the parent model has enums. + if (parentCodegenModel.hasEnums) { + + // Get the properties for the parent and child models + final List parentModelCodegenProperties = parentCodegenModel.vars; + List codegenProperties = codegenModel.vars; + + // Iterate over all of the parent model properties + boolean removedChildEnum = false; + for (CodegenProperty parentModelCodegenPropery : parentModelCodegenProperties) { + // Look for enums + if (parentModelCodegenPropery.isEnum) { + // Now that we have found an enum in the parent class, + // and search the child class for the same enum. + Iterator iterator = codegenProperties.iterator(); + while (iterator.hasNext()) { + CodegenProperty codegenProperty = iterator.next(); + if (codegenProperty.isEnum && codegenProperty.equals(parentModelCodegenPropery)) { + // We found an enum in the child class that is + // a duplicate of the one in the parent, so remove it. + iterator.remove(); + removedChildEnum = true; + } + } + } + } + + if (removedChildEnum) { + // If we removed an entry from this model's vars, we need to ensure hasMore is updated + int count = 0, numVars = codegenProperties.size(); + for (CodegenProperty codegenProperty : codegenProperties) { + count += 1; + codegenProperty.hasMore = count < numVars; + } + codegenModel.vars = codegenProperties; + } + } + + return codegenModel; + } + + @Override + public String toEnumVarName(String value, String datatype) { + if (value.length() == 0) { + return "Empty"; + } + + // for symbol, e.g. $, # + if (getSymbolName(value) != null) { + return camelize(getSymbolName(value)); + } + + // number + if (datatype.startsWith("int") || datatype.startsWith("long") || + datatype.startsWith("double") || datatype.startsWith("float")) { + String varName = "NUMBER_" + value; + varName = varName.replaceAll("-", "MINUS_"); + varName = varName.replaceAll("\\+", "PLUS_"); + varName = varName.replaceAll("\\.", "_DOT_"); + return varName; + } + + // string + String var = value.replaceAll("_", " "); + //var = WordUtils.capitalizeFully(var); + var = camelize(var); + var = var.replaceAll("\\W+", ""); + + if (var.matches("\\d.*")) { + return "_" + var; + } else { + return var; + } + } + + @Override + public String toVarName(String name) { + // sanitize name + name = sanitizeName(name); + + // if it's all uppper case, do nothing + if (name.matches("^[A-Z_]*$")) { + return name; + } + + name = getNameUsingModelPropertyNaming(name); + + // for reserved word or word starting with number, append _ + if (isReservedWord(name) || name.matches("^\\d.*")) { + name = escapeReservedWord(name); + } + + return name; + } + + public String getNameUsingModelPropertyNaming(String name) { + switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) { + case original: + return name; + case camelCase: + return camelize(name, true); + case PascalCase: + return camelize(name); + case snake_case: + return underscore(name); + default: + throw new IllegalArgumentException("Invalid model property naming '" + + name + "'. Must be 'original', 'camelCase', " + + "'PascalCase' or 'snake_case'"); + } + } + + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public void setPackageVersion(String packageVersion) { + this.packageVersion = packageVersion; + } + + public void setTargetFrameworkNuget(String targetFrameworkNuget) { + this.targetFrameworkNuget = targetFrameworkNuget; + } + + public void setSupportsAsync(Boolean supportsAsync) { + this.supportsAsync = supportsAsync; + } + + public void setSupportsUWP(Boolean supportsUWP) { + this.supportsUWP = supportsUWP; + } + + public void setNetStandard(Boolean netStandard) { + this.netStandard = netStandard; + } + + public void setGeneratePropertyChanged(final Boolean generatePropertyChanged) { + this.generatePropertyChanged = generatePropertyChanged; + } + + public boolean isNonPublicApi() { + return nonPublicApi; + } + + public void setNonPublicApi(final boolean nonPublicApi) { + this.nonPublicApi = nonPublicApi; + } + + public void setValidatable(boolean validatable) { + this.validatable = validatable; + } + + @Override + public String toModelDocFilename(String name) { + return toModelFilename(name); + } + + @Override + public String apiDocFileFolder() { + return (outputFolder + "/" + apiDocPath).replace('/', File.separatorChar); + } + + @Override + public String modelDocFileFolder() { + return (outputFolder + "/" + modelDocPath).replace('/', File.separatorChar); + } + + @Override + public String apiTestFileFolder() { + return outputFolder + File.separator + testFolder + File.separator + testPackageName() + File.separator + apiPackage(); + } + + @Override + public String modelTestFileFolder() { + return outputFolder + File.separator + testFolder + File.separator + testPackageName() + File.separator + modelPackage(); + } + + @Override + public Mustache.Compiler processCompiler(Mustache.Compiler compiler) { + // To avoid unexpected behaviors when options are passed programmatically such as { "supportsAsync": "" } + return super.processCompiler(compiler).emptyStringIsFalse(true); + } +} 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 6bd50bc8e2..bf2a7c7363 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 @@ -14,6 +14,7 @@ org.openapitools.codegen.languages.CppRestbedServerCodegen org.openapitools.codegen.languages.CppRestSdkClientCodegen org.openapitools.codegen.languages.CppTizenClientCodegen org.openapitools.codegen.languages.CSharpClientCodegen +org.openapitools.codegen.languages.CSharpRefactorClientCodegen org.openapitools.codegen.languages.CSharpDotNet2ClientCodegen org.openapitools.codegen.languages.CSharpNancyFXServerCodegen org.openapitools.codegen.languages.DartClientCodegen diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiClient.mustache new file mode 100644 index 0000000000..3e222c2d96 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiClient.mustache @@ -0,0 +1,555 @@ +{{>partial_header}} + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.IO; +{{^netStandard}} +{{^supportsUWP}} +using System.Web; +{{/supportsUWP}} +{{/netStandard}} +using System.Linq; +using System.Net; +using System.Text; +using Newtonsoft.Json; +{{#netStandard}} +using RestSharp.Portable; +using RestSharp.Portable.HttpClient; +using RestSharpMethod = RestSharp.Portable.Method; +{{/netStandard}} +{{^netStandard}} +using RestSharp; +using RestSharpMethod = RestSharp.Method; +{{/netStandard}} + +namespace {{packageName}}.Client +{ + /// + /// Allows RestSharp to Serialize/Deserialize JSON using our custom logic, but only when ContentType is JSON. + /// + internal class CustomJsonCodec : RestSharp.Serializers.ISerializer, RestSharp.Deserializers.IDeserializer + { + private readonly IReadableConfiguration _configuration; + private readonly JsonSerializer _serializer; + private string _contentType = "application/json"; + private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings + { + // Swagger generated types generally hide default constructors. + ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor + }; + + public CustomJsonCodec(IReadableConfiguration configuration) + { + _configuration = configuration; + _serializer = JsonSerializer.Create(_serializerSettings); + } + + public CustomJsonCodec(JsonSerializerSettings serializerSettings, IReadableConfiguration configuration) + { + _serializerSettings = serializerSettings; + _serializer = JsonSerializer.Create(_serializerSettings); + _configuration = configuration; + } + + public string Serialize(object obj) + { + using (var writer = new StringWriter()) + using (var jsonWriter = new JsonTextWriter(writer) + { + Formatting = Formatting.None, + DateFormatString = _configuration.DateTimeFormat + }) + { + _serializer.Serialize(jsonWriter, obj); + return writer.ToString(); + } + } + + public T Deserialize(IRestResponse response) + { + return (T) Deserialize(response, typeof(T)); + } + + /// + /// Deserialize the JSON string into a proper object. + /// + /// The HTTP response. + /// Object type. + /// Object representation of the JSON string. + internal object Deserialize(IRestResponse response, Type type) + { + IList headers = response.Headers; + if (type == typeof(byte[])) // return byte array + { + return response.RawBytes; + } + + // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) + if (type == typeof(Stream)) + { + if (headers != null) + { + var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) + ? Path.GetTempPath() + : _configuration.TempFolderPath; + var regex = new Regex(@"Content-Disposition=.*filename=['""]?([^'""\s]+)['""]?$"); + foreach (var header in headers) + { + var match = regex.Match(header.ToString()); + if (match.Success) + { + string fileName = filePath + ClientUtils.SanitizeFilename(match.Groups[1].Value.Replace("\"", "").Replace("'", "")); + File.WriteAllBytes(fileName, response.RawBytes); + return new FileStream(fileName, FileMode.Open); + } + } + } + var stream = new MemoryStream(response.RawBytes); + return stream; + } + + if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object + { + return DateTime.Parse(response.Content, null, System.Globalization.DateTimeStyles.RoundtripKind); + } + + if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type + { + return ClientUtils.ConvertType(response.Content, type); + } + + // at this point, it must be a model (json) + try + { + return JsonConvert.DeserializeObject(response.Content, type, _serializerSettings); + } + catch (Exception e) + { + throw new ApiException(500, e.Message); + } + } + + public string RootElement { get; set; } + public string Namespace { get; set; } + public string DateFormat { get; set; } + + public string ContentType + { + get { return _contentType; } + set { throw new InvalidOperationException("Not allowed to set content type."); } + } + } + {{! NOTE: Any changes related to RestSharp should be done in this class. All other client classes are for extensibility by consumers.}} + /// + /// Provides a default implementation of an Api client (both synchronous and asynchronous implementatios), + /// encapsulating general REST accessor use cases. + /// + {{>visibility}} partial class ApiClient : ISynchronousClient{{#supportsAsync}}, IAsynchronousClient{{/supportsAsync}} + { + private readonly String _baseUrl; + + /// + /// Allows for extending request processing for generated code. + /// + /// The RestSharp request object + partial void InterceptRequest(IRestRequest request); + + /// + /// Allows for extending response processing for generated code. + /// + /// The RestSharp request object + /// The RestSharp response object + partial void InterceptResponse(IRestRequest request, IRestResponse response); + + /// + /// Initializes a new instance of the , defaulting to the global configurations' base url. + /// + public ApiClient() + { + _baseUrl = {{packageName}}.Client.GlobalConfiguration.Instance.BasePath; + } + + /// + /// Initializes a new instance of the + /// + /// The target service's base path in URL format. + /// + public ApiClient(String basePath) + { + if (String.IsNullOrEmpty(basePath)) + throw new ArgumentException("basePath cannot be empty"); + + _baseUrl = basePath; + } + + /// + /// Constructs the RestSharp version of an http method + /// + /// Swagger Client Custom HttpMethod + /// RestSharp's HttpMethod instance. + /// + private RestSharpMethod Method(HttpMethod method) + { + RestSharpMethod other; + switch (method) + { + case HttpMethod.Get: + other = RestSharpMethod.GET; + break; + case HttpMethod.Post: + other = RestSharpMethod.POST; + break; + case HttpMethod.Put: + other = RestSharpMethod.PUT; + break; + case HttpMethod.Delete: + other = RestSharpMethod.DELETE; + break; + case HttpMethod.Head: + other = RestSharpMethod.HEAD; + break; + case HttpMethod.Options: + other = RestSharpMethod.OPTIONS; + break; + case HttpMethod.Patch: + other = RestSharpMethod.PATCH; + break; + default: + throw new ArgumentOutOfRangeException("method", method, null); + } + + return other; + } + + /// + /// Provides all logic for constructing a new RestSharp . + /// At this point, all information for querying the service is known. Here, it is simply + /// mapped into the RestSharp request. + /// + /// The http verb. + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// [private] A new RestRequest instance. + /// + private RestRequest newRequest( + HttpMethod method, + String path, + RequestOptions options, + IReadableConfiguration configuration) + { + if (path == null) throw new ArgumentNullException("path"); + if (options == null) throw new ArgumentNullException("options"); + if (configuration == null) throw new ArgumentNullException("configuration"); + + RestRequest request = new RestRequest(path, Method(method)); + + if (options.PathParameters != null) + { + foreach (var pathParam in options.PathParameters) + { + request.AddParameter(pathParam.Key, pathParam.Value, ParameterType.UrlSegment); + } + } + + if (options.QueryParameters != null) + { + foreach (var queryParam in options.QueryParameters) + { + foreach (var value in queryParam.Value) + { + request.AddQueryParameter(queryParam.Key, value); + } + } + } + + if (options.HeaderParameters != null) + { + foreach (var headerParam in options.HeaderParameters) + { + foreach (var value in headerParam.Value) + { + request.AddHeader(headerParam.Key, value); + } + } + } + + if (options.FormParameters != null) + { + foreach (var formParam in options.FormParameters) + { + request.AddParameter(formParam.Key, formParam.Value); + } + } + + if (options.Data != null) + { + if (options.HeaderParameters != null) + { + var contentTypes = options.HeaderParameters["Content-Type"]; + if (contentTypes == null || contentTypes.Any(header => header.Contains("application/json"))) + { + request.RequestFormat = DataFormat.Json; + } + else + { + // TODO: Generated client user should add additional handlers. RestSharp only supports XML and JSON, with XML as default. + } + } + else + { + // Here, we'll assume JSON APIs are more common. XML can be forced by adding produces/consumes to openapi spec explicitly. + request.RequestFormat = DataFormat.Json; + } + + request.AddBody(options.Data); + } + + if (options.FileParameters != null) + { + foreach (var fileParam in options.FileParameters) + { + var bytes = ClientUtils.ReadAsBytes(fileParam.Value); + var fileStream = fileParam.Value as FileStream; + if (fileStream != null) + FileParameter.Create(fileParam.Key, bytes, System.IO.Path.GetFileName(fileStream.Name)); + else + FileParameter.Create(fileParam.Key, bytes, "no_file_name_provided"); + } + } + + if (options.Cookies != null && options.Cookies.Count > 0) + { + foreach (var cookie in options.Cookies) + { + request.AddCookie(cookie.Name, cookie.Value); + } + } + + return request; + } + + private ApiResponse toApiResponse({{#supportsAsync}}IRestResponse response{{/supportsAsync}}{{^supportsAsync}}IRestResponse response, CustomJsonCodec des{{/supportsAsync}}) + { + T result = {{#supportsAsync}}response.Data{{/supportsAsync}}{{^supportsAsync}}(T)des.Deserialize(response, typeof(T)){{/supportsAsync}}; + var transformed = new ApiResponse(response.StatusCode, new Multimap(), result) + { + ErrorText = response.ErrorMessage, + Cookies = new List() + }; + + if (response.Headers != null) + { + foreach (var responseHeader in response.Headers) + { + transformed.Headers.Add(responseHeader.Name, ClientUtils.ParameterToString(responseHeader.Value)); + } + } + + if (response.Cookies != null) + { + foreach (var responseCookies in response.Cookies) + { + transformed.Cookies.Add( + new Cookie( + responseCookies.Name, + responseCookies.Value, + responseCookies.Path, + responseCookies.Domain) + ); + } + } + + return transformed; + } + + private {{#supportsAsync}}async Task>{{/supportsAsync}}{{^supportsAsync}}ApiResponse{{/supportsAsync}} Exec(RestRequest req, IReadableConfiguration configuration) + { + RestClient client = new RestClient(_baseUrl); + + var codec = new CustomJsonCodec(configuration); + req.JsonSerializer = codec; + client.AddHandler(codec.ContentType, codec); + + client.Timeout = configuration.Timeout; + + if (configuration.UserAgent != null) + { + client.UserAgent = configuration.UserAgent; + } + + InterceptRequest(req); + {{#supportsAsync}} + var response = await client.ExecuteTaskAsync(req); + {{/supportsAsync}} + {{^supportsAsync}} + var response = client.Execute(req); + {{/supportsAsync}} + InterceptResponse(req, response); + + var result = toApiResponse(response{{^supportsAsync}}, codec{{/supportsAsync}}); + if (response.ErrorMessage != null) + { + result.ErrorText = response.ErrorMessage; + } + + if (response.Cookies != null && response.Cookies.Count > 0) + { + if(result.Cookies == null) result.Cookies = new List(); + foreach (var restResponseCookie in response.Cookies) + { + var cookie = new Cookie( + restResponseCookie.Name, + restResponseCookie.Value, + restResponseCookie.Path, + restResponseCookie.Domain + ) + { + Comment = restResponseCookie.Comment, + CommentUri = restResponseCookie.CommentUri, + Discard = restResponseCookie.Discard, + Expired = restResponseCookie.Expired, + Expires = restResponseCookie.Expires, + HttpOnly = restResponseCookie.HttpOnly, + Port = restResponseCookie.Port, + Secure = restResponseCookie.Secure, + Version = restResponseCookie.Version + }; + + result.Cookies.Add(cookie); + } + } + return result; + } + + {{#supportsAsync}} + #region IAsynchronousClient + public async Task> GetAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Get, path, options, config), config); + } + + public async Task> PostAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Post, path, options, config), config); + } + + public async Task> PutAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Put, path, options, config), config); + } + + public async Task> DeleteAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Delete, path, options, config), config); + } + + public async Task> HeadAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Head, path, options, config), config); + } + + public async Task> OptionsAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Options, path, options, config), config); + } + + public async Task> PatchAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Patch, path, options, config), config); + } + #endregion IAsynchronousClient + {{/supportsAsync}} + + #region ISynchronousClient + public ApiResponse Get(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return GetAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Get, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Post(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return PostAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Post, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Put(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return PutAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Put, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Delete(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return DeleteAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Delete, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Head(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return HeadAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Head, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Options(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return OptionsAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Options, path, options, config), config); + {{/supportsAsync}} + } + + public ApiResponse Patch(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + {{#supportsAsync}} + return PatchAsync(path, options, configuration).Result; + {{/supportsAsync}} + {{^supportsAsync}} + var config = configuration ?? GlobalConfiguration.Instance; + return Exec(newRequest(HttpMethod.Patch, path, options, config), config); + {{/supportsAsync}} + } + #endregion ISynchronousClient + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ApiException.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiException.mustache new file mode 100644 index 0000000000..138284907c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiException.mustache @@ -0,0 +1,52 @@ +{{>partial_header}} + +using System; + +namespace {{packageName}}.Client +{ + /// + /// API Exception + /// + {{>visibility}} class ApiException : Exception + { + /// + /// Gets or sets the error code (HTTP status code) + /// + /// The error code (HTTP status code). + public int ErrorCode { get; set; } + + /// + /// Gets or sets the error content (body json object) + /// + /// The error content (Http response body). + public {{#supportsAsync}}dynamic{{/supportsAsync}}{{^supportsAsync}}object{{/supportsAsync}} ErrorContent { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + public ApiException() {} + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + public ApiException(int errorCode, string message) : base(message) + { + this.ErrorCode = errorCode; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + /// Error content. + public ApiException(int errorCode, string message, {{#supportsAsync}}dynamic{{/supportsAsync}}{{^supportsAsync}}object{{/supportsAsync}} errorContent = null) : base(message) + { + this.ErrorCode = errorCode; + this.ErrorContent = errorContent; + } + } + +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ApiResponse.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiResponse.mustache new file mode 100644 index 0000000000..eee53bf305 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ApiResponse.mustache @@ -0,0 +1,128 @@ +{{>partial_header}} + +using System; +using System.Collections.Generic; +using System.Net; + +namespace {{packageName}}.Client +{ + /// + /// Provides a non-generic contract for the ApiResponse wrapper. + /// + public interface IApiResponse + { + /// + /// The data type of + /// + Type ResponseType { get; } + + /// + /// The content of this response + /// + Object Content { get; } + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + Multimap Headers { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + List Cookies { get; set; } + } + + /// + /// API Response + /// + public class ApiResponse : IApiResponse + { + #region Properties + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + public HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + public Multimap Headers { get; } + + /// + /// Gets or sets the data (parsed HTTP body) + /// + /// The data. + public T Data { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + public String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + public List Cookies { get; set; } + + /// + /// The content of this response + /// + public Type ResponseType + { + get { return typeof(T); } + } + + /// + /// The data type of + /// + public object Content + { + get { return Data; } + } + + #endregion Properties + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// HTTP headers. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, Multimap headers, T data) + { + StatusCode = statusCode; + Headers = headers; + Data = data; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, T data) + { + StatusCode = statusCode; + Data = data; + } + + #endregion Constructors + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/AssemblyInfo.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/AssemblyInfo.mustache new file mode 100644 index 0000000000..d5d937dc19 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/AssemblyInfo.mustache @@ -0,0 +1,40 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("{{packageTitle}}")] +[assembly: AssemblyDescription("{{packageDescription}}")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("{{packageCompany}}")] +[assembly: AssemblyProduct("{{packageProductName}}")] +[assembly: AssemblyCopyright("{{packageCopyright}}")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("{{packageVersion}}")] +[assembly: AssemblyFileVersion("{{packageVersion}}")] +{{^supportsAsync}} +// Settings which don't support asynchronous operations rely on non-public constructors +// This is due to how RestSharp requires the type constraint `where T : new()` in places it probably shouldn't. +[assembly: InternalsVisibleTo("RestSharp")] +[assembly: InternalsVisibleTo("NewtonSoft.Json")] +[assembly: InternalsVisibleTo("JsonSubTypes")] +{{/supportsAsync}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ClientUtils.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ClientUtils.mustache new file mode 100755 index 0000000000..135a83aaad --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ClientUtils.mustache @@ -0,0 +1,193 @@ +{{>partial_header}} + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace {{packageName}}.Client +{ + /// + /// Utility functions providing some benefit to API client consumers. + /// + public static class ClientUtils + { + /// + /// Sanitize filename by removing the path + /// + /// Filename + /// Filename + public static string SanitizeFilename(string filename) + { + Match match = Regex.Match(filename, @".*[/\\](.*)$"); + return match.Success ? match.Groups[1].Value : filename; + } + + /// + /// Convert params to key/value pairs. + /// Use collectionFormat to properly format lists and collections. + /// + /// The swagger-supported collection format, one of: csv, tsv, ssv, pipes, multi + /// Key name. + /// Value object. + /// A multimap of keys with 1..n associated values. + public static Multimap ParameterToMultiMap(string collectionFormat, string name, object value) + { + var parameters = new Multimap(); + + if (IsCollection(value) && collectionFormat == "multi") + { + var valueCollection = value as IEnumerable; + if (valueCollection != null) + { + foreach (var item in valueCollection) + { + parameters.Add(name, ParameterToString(item)); + } + } + } + else + { + parameters.Add(name, ParameterToString(value)); + } + + return parameters; + } + + /// + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. + /// If parameter is a list, join the list with ",". + /// Otherwise just return the string. + /// + /// The parameter (header, path, query, form). + /// An optional configuration instance, providing formatting options used in processing. + /// Formatted string. + public static string ParameterToString(object obj, IReadableConfiguration configuration = null) + { + if (obj is DateTime) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTime)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else if (obj is DateTimeOffset) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTimeOffset)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else + { + if (obj is IList) + { + var list = obj as IList; + var flattenedString = new StringBuilder(); + foreach (var param in list) + { + if (flattenedString.Length > 0) + flattenedString.Append(","); + flattenedString.Append(param); + } + return flattenedString.ToString(); + } + + return Convert.ToString (obj); + } + } + + /// + /// Check if generic object is a collection. + /// + /// + /// True if object is a collection type + private static bool IsCollection(object value) + { + return value is IList || value is ICollection; + } + + /// + /// URL encode a string + /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 + /// + /// String to be URL encoded + /// Byte array + public static string UrlEncode(string input) + { + const int maxLength = 32766; + + if (input == null) + { + throw new ArgumentNullException("input"); + } + + if (input.Length <= maxLength) + { + return Uri.EscapeDataString(input); + } + + StringBuilder sb = new StringBuilder(input.Length * 2); + int index = 0; + + while (index < input.Length) + { + int length = Math.Min(input.Length - index, maxLength); + string subString = input.Substring(index, length); + + sb.Append(Uri.EscapeDataString(subString)); + index += subString.Length; + } + + return sb.ToString(); + } + + /// + /// Encode string in base64 format. + /// + /// String to be encoded. + /// Encoded string. + public static string Base64Encode(string text) + { + return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); + } + + /// + /// Convert stream to byte array + /// + /// Input stream to be converted + /// Byte array + public static byte[] ReadAsBytes(Stream inputStream) + { + byte[] buf = new byte[16*1024]; + using (MemoryStream ms = new MemoryStream()) + { + int count; + while ((count = inputStream.Read(buf, 0, buf.Length)) > 0) + { + ms.Write(buf, 0, count); + } + return ms.ToArray(); + } + } + + /// + /// Dynamically cast the object into target type. + /// + /// Object to be casted + /// Target type + /// Casted object + {{#supportsAsync}} + public static dynamic ConvertType(dynamic fromObject, Type toObject) + {{/supportsAsync}} + {{^supportsAsync}} + public static object ConvertType(T fromObject, Type toObject) where T : class + {{/supportsAsync}} + { + return Convert.ChangeType(fromObject, toObject); +} + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/Configuration.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/Configuration.mustache new file mode 100644 index 0000000000..15b9607912 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/Configuration.mustache @@ -0,0 +1,395 @@ +{{>partial_header}} + +using System; +using System.Reflection; +{{^net35}} +using System.Collections.Concurrent; +{{/net35}} +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace {{packageName}}.Client +{ + /// + /// Represents a set of configuration settings + /// + {{>visibility}} class Configuration : IReadableConfiguration + { + #region Constants + + /// + /// Version of the package. + /// + /// Version of the package. + public const string Version = "{{packageVersion}}"; + + /// + /// Identifier for ISO 8601 DateTime Format + /// + /// See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information. + // ReSharper disable once InconsistentNaming + public const string ISO8601_DATETIME_FORMAT = "o"; + + #endregion Constants + + #region Static Members + + /// + /// Default creation of exceptions for a given method name and response object + /// + public static readonly ExceptionFactory DefaultExceptionFactory = (methodName, response) => + { + var status = (int)response.StatusCode; + if (status >= 400) + { + return new ApiException(status, + string.Format("Error calling {0}: {1}", methodName, response.Content), + response.Content); + } + {{^netStandard}}if (status == 0) + { + return new ApiException(status, + string.Format("Error calling {0}: {1}", methodName, response.ErrorText), response.ErrorText); + }{{/netStandard}} + return null; + }; + + #endregion Static Members + + #region Private Members + + /// + /// Defines the base path of the target API server. + /// Example: http://localhost:3000/v1/ + /// + private String _basePath; + + /// + /// Gets or sets the API key based on the authentication name. + /// This is the key and value comprising the "secret" for acessing an API. + /// + /// The API key. + private IDictionary _apiKey; + + /// + /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// The prefix of the API key. + private IDictionary _apiKeyPrefix; + + private string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + private string _tempFolderPath = Path.GetTempPath(); + + #endregion Private Members + + #region Constructors + + /// + /// Initializes a new instance of the class + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] + public Configuration() + { + UserAgent = "{{#httpUserAgent}}{{.}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{packageVersion}}/csharp{{/httpUserAgent}}"; + BasePath = "{{{basePath}}}"; + DefaultHeader = new {{^net35}}Concurrent{{/net35}}Dictionary(); + ApiKey = new {{^net35}}Concurrent{{/net35}}Dictionary(); + ApiKeyPrefix = new {{^net35}}Concurrent{{/net35}}Dictionary(); + + // Setting Timeout has side effects (forces ApiClient creation). + Timeout = 100000; + } + + /// + /// Initializes a new instance of the class + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] + public Configuration( + IDictionary defaultHeader, + IDictionary apiKey, + IDictionary apiKeyPrefix, + string basePath = "{{{basePath}}}") : this() + { + if (string.{{^net35}}IsNullOrWhiteSpace{{/net35}}{{#net35}}IsNullOrEmpty{{/net35}}(basePath)) + throw new ArgumentException("The provided basePath is invalid.", "basePath"); + if (defaultHeader == null) + throw new ArgumentNullException("defaultHeader"); + if (apiKey == null) + throw new ArgumentNullException("apiKey"); + if (apiKeyPrefix == null) + throw new ArgumentNullException("apiKeyPrefix"); + + BasePath = basePath; + + foreach (var keyValuePair in defaultHeader) + { + DefaultHeader.Add(keyValuePair); + } + + foreach (var keyValuePair in apiKey) + { + ApiKey.Add(keyValuePair); + } + + foreach (var keyValuePair in apiKeyPrefix) + { + ApiKeyPrefix.Add(keyValuePair); + } + } + + #endregion Constructors + + #region Properties + + /// + /// Gets or sets the base path for API access. + /// + public virtual string BasePath { + get { return _basePath; } + set { + _basePath = value; + } + } + + /// + /// Gets or sets the default header. + /// + public virtual IDictionary DefaultHeader { get; set; } + + /// + /// Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds. + /// + public virtual int Timeout { get; set; } + + /// + /// Gets or sets the HTTP user agent. + /// + /// Http user agent. + public virtual string UserAgent { get; set; } + + /// + /// Gets or sets the username (HTTP basic authentication). + /// + /// The username. + public virtual string Username { get; set; } + + /// + /// Gets or sets the password (HTTP basic authentication). + /// + /// The password. + public virtual string Password { get; set; } + + /// + /// Gets the API key with prefix. + /// + /// API key identifier (authentication scheme). + /// API key with prefix. + public string GetApiKeyWithPrefix(string apiKeyIdentifier) + { + string apiKeyValue; + ApiKey.TryGetValue (apiKeyIdentifier, out apiKeyValue); + string apiKeyPrefix; + if (ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix)) + { + return apiKeyPrefix + " " + apiKeyValue; + } + + return apiKeyValue; + } + + /// + /// Gets or sets the access token for OAuth2 authentication. + /// + /// This helper property simplifies code generation. + /// + /// The access token. + public virtual string AccessToken { get; set; } + + /// + /// Gets or sets the temporary folder path to store the files downloaded from the server. + /// + /// Folder path. + public virtual string TempFolderPath + { + get { return _tempFolderPath; } + + set + { + if (string.IsNullOrEmpty(value)) + { + _tempFolderPath = Path.GetTempPath(); + return; + } + + // create the directory if it does not exist + if (!Directory.Exists(value)) + { + Directory.CreateDirectory(value); + } + + // check if the path contains directory separator at the end + if (value[value.Length - 1] == Path.DirectorySeparatorChar) + { + _tempFolderPath = value; + } + else + { + _tempFolderPath = value + Path.DirectorySeparatorChar; + } + } + } + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public virtual string DateTimeFormat + { + get { return _dateTimeFormat; } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + + /// + /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// Whatever you set here will be prepended to the value defined in AddApiKey. + /// + /// An example invocation here might be: + /// + /// ApiKeyPrefix["Authorization"] = "Bearer"; + /// + /// … where ApiKey["Authorization"] would then be used to set the value of your bearer token. + /// + /// + /// OAuth2 workflows should set tokens via AccessToken. + /// + /// + /// The prefix of the API key. + public virtual IDictionary ApiKeyPrefix + { + get { return _apiKeyPrefix; } + set + { + if (value == null) + { + throw new InvalidOperationException("ApiKeyPrefix collection may not be null."); + } + _apiKeyPrefix = value; + } + } + + /// + /// Gets or sets the API key based on the authentication name. + /// + /// The API key. + public virtual IDictionary ApiKey + { + get { return _apiKey; } + set + { + if (value == null) + { + throw new InvalidOperationException("ApiKey collection may not be null."); + } + _apiKey = value; + } + } + + #endregion Properties + + #region Methods + + /// + /// Returns a string with essential information for debugging. + /// + public static String ToDebugReport() + { + String report = "C# SDK ({{{packageName}}}) Debug Report:\n"; + {{^netStandard}} + {{^supportsUWP}} + report += " OS: " + System.Environment.OSVersion + "\n"; + report += " .NET Framework Version: " + System.Environment.Version + "\n"; + {{/supportsUWP}} + {{/netStandard}} + {{#netStandard}} + report += " OS: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription + "\n"; + {{/netStandard}} + report += " Version of the API: {{{version}}}\n"; + report += " SDK Package Version: {{{packageVersion}}}\n"; + + return report; + } + + /// + /// Add Api Key Header. + /// + /// Api Key name. + /// Api Key value. + /// + public void AddApiKey(string key, string value) + { + ApiKey[key] = value; + } + + /// + /// Sets the API key prefix. + /// + /// Api Key name. + /// Api Key value. + public void AddApiKeyPrefix(string key, string value) + { + ApiKeyPrefix[key] = value; + } + + #endregion Methods + + #region Static Members + public static IReadableConfiguration MergeConfigurations(IReadableConfiguration first, IReadableConfiguration second) + { + if (second == null) return first ?? GlobalConfiguration.Instance; + + Dictionary apiKey = first.ApiKey.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary apiKeyPrefix = first.ApiKeyPrefix.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary defaultHeader = first.DefaultHeader.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + + foreach (var kvp in second.ApiKey) apiKey[kvp.Key] = kvp.Value; + foreach (var kvp in second.ApiKeyPrefix) apiKeyPrefix[kvp.Key] = kvp.Value; + foreach (var kvp in second.DefaultHeader) defaultHeader[kvp.Key] = kvp.Value; + + var config = new Configuration + { + ApiKey = apiKey, + ApiKeyPrefix = apiKeyPrefix, + DefaultHeader = defaultHeader, + BasePath = second.BasePath ?? first.BasePath, + Timeout = second.Timeout, + UserAgent = second.UserAgent ?? first.UserAgent, + Username = second.Username ?? first.Username, + Password = second.Password ?? first.Password, + AccessToken = second.AccessToken ?? first.AccessToken, + TempFolderPath = second.TempFolderPath ?? first.TempFolderPath, + DateTimeFormat = second.DateTimeFormat ?? first.DateTimeFormat + }; + return config; + } + #endregion Static Members + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ExceptionFactory.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ExceptionFactory.mustache new file mode 100644 index 0000000000..4a141f6f1a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ExceptionFactory.mustache @@ -0,0 +1,14 @@ +{{>partial_header}} + +using System; + +namespace {{packageName}}.Client +{ + /// + /// A delegate to ExceptionFactory method + /// + /// Method name + /// Response + /// Exceptions + {{>visibility}} delegate Exception ExceptionFactory(string methodName, IApiResponse response); +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/FodyWeavers.xml b/modules/openapi-generator/src/main/resources/csharp-refactor/FodyWeavers.xml new file mode 100644 index 0000000000..da017fcbf6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/FodyWeavers.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/GlobalConfiguration.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/GlobalConfiguration.mustache new file mode 100644 index 0000000000..bdfa4b99cc --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/GlobalConfiguration.mustache @@ -0,0 +1,59 @@ +{{>partial_header}} + +using System.Collections.Generic; + +namespace {{packageName}}.Client +{ + /// + /// provides a compile-time extension point for globally configuring + /// API Clients. + /// + /// + /// A customized implementation via partial class may reside in another file and may + /// be excluded from automatic generation via a .openapi-generator-ignore file. + /// + public partial class GlobalConfiguration : Configuration + { + #region Private Members + + private static readonly object GlobalConfigSync = new { }; + private static IReadableConfiguration _globalConfiguration; + + #endregion Private Members + + #region Constructors + + /// + private GlobalConfiguration() + { + } + + /// + public GlobalConfiguration(IDictionary defaultHeader, IDictionary apiKey, IDictionary apiKeyPrefix, string basePath = "http://localhost:3000/api") : base(defaultHeader, apiKey, apiKeyPrefix, basePath) + { + } + + static GlobalConfiguration() + { + Instance = new GlobalConfiguration(); + } + + #endregion Constructors + + /// + /// Gets or sets the default Configuration. + /// + /// Configuration. + public static IReadableConfiguration Instance + { + get { return _globalConfiguration; } + set + { + lock (GlobalConfigSync) + { + _globalConfiguration = value; + } + } + } + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/HttpMethod.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/HttpMethod.mustache new file mode 100755 index 0000000000..fe0c744817 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/HttpMethod.mustache @@ -0,0 +1,18 @@ +{{>partial_header}} + +namespace {{packageName}}.Client +{ + /// + /// Http methods supported by swagger + /// + public enum HttpMethod + { + Get, + Post, + Put, + Delete, + Head, + Options, + Patch + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/IApiAccessor.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/IApiAccessor.mustache new file mode 100644 index 0000000000..7ed972352e --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/IApiAccessor.mustache @@ -0,0 +1,29 @@ +{{>partial_header}} + +using System; + +namespace {{packageName}}.Client +{ + /// + /// Represents configuration aspects required to interact with the API endpoints. + /// + {{>visibility}} interface IApiAccessor + { + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + IReadableConfiguration Configuration {get; set;} + + /// + /// Gets the base path of the API client. + /// + /// The base path + String GetBasePath(); + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + ExceptionFactory ExceptionFactory { get; set; } + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/IAsynchronousClient.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/IAsynchronousClient.mustache new file mode 100755 index 0000000000..0068ce5cd4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/IAsynchronousClient.mustache @@ -0,0 +1,87 @@ +{{>partial_header}} + +{{^supportsAsync}}/*{{/supportsAsync}} +using System; +using System.Threading.Tasks; + +namespace {{packageName}}.Client +{ + /// + /// Contract for Asynchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface IAsynchronousClient + { + /// + /// Executes a non-blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> GetAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PostAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PutAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> DeleteAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> HeadAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> OptionsAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PatchAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} +{{^supportsAsync}}*/{{/supportsAsync}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/IReadableConfiguration.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/IReadableConfiguration.mustache new file mode 100644 index 0000000000..ce165e0c81 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/IReadableConfiguration.mustache @@ -0,0 +1,85 @@ +{{>partial_header}} + +using System.Collections.Generic; + +namespace {{packageName}}.Client +{ + /// + /// Represents a readable-only configuration contract. + /// + public interface IReadableConfiguration + { + /// + /// Gets the access token. + /// + /// Access token. + string AccessToken { get; } + + /// + /// Gets the API key. + /// + /// API key. + IDictionary ApiKey { get; } + + /// + /// Gets the API key prefix. + /// + /// API key prefix. + IDictionary ApiKeyPrefix { get; } + + /// + /// Gets the base path. + /// + /// Base path. + string BasePath { get; } + + /// + /// Gets the date time format. + /// + /// Date time foramt. + string DateTimeFormat { get; } + + /// + /// Gets the default header. + /// + /// Default header. + IDictionary DefaultHeader { get; } + + /// + /// Gets the temp folder path. + /// + /// Temp folder path. + string TempFolderPath { get; } + + /// + /// Gets the HTTP connection timeout (in milliseconds) + /// + /// HTTP connection timeout. + int Timeout { get; } + + /// + /// Gets the user agent. + /// + /// User agent. + string UserAgent { get; } + + /// + /// Gets the username. + /// + /// Username. + string Username { get; } + + /// + /// Gets the password. + /// + /// Password. + string Password { get; } + + /// + /// Gets the API key with prefix. + /// + /// API key identifier (authentication scheme). + /// API key with prefix. + string GetApiKeyWithPrefix(string apiKeyIdentifier); + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ISynchronousClient.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ISynchronousClient.mustache new file mode 100755 index 0000000000..627c9e3361 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ISynchronousClient.mustache @@ -0,0 +1,85 @@ +{{>partial_header}} + +using System; +using System.IO; + +namespace {{packageName}}.Client +{ + /// + /// Contract for Synchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface ISynchronousClient + { + /// + /// Executes a blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Get(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Post(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Put(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Delete(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Head(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Options(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Patch(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/JsonSubTypesTests.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/JsonSubTypesTests.mustache new file mode 100644 index 0000000000..9b1f66624d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/JsonSubTypesTests.mustache @@ -0,0 +1,125 @@ +{{>partial_header}} + +using System.Collections.Generic; +using System.Linq; +using JsonSubTypes; +using Newtonsoft.Json; +using NUnit.Framework; + +using {{packageName}}.{{apiPackage}}; +using {{packageName}}.{{modelPackage}}; +using {{packageName}}.Client; + +namespace {{packageName}}.Test.Client +{ + public class JsonSubTypesTests + { + [Test] + public void TestSimpleJsonSubTypesExample() + { + var annimal = + JsonConvert.DeserializeObject("{\"Kind\":\"Dog\",\"Breed\":\"Jack Russell Terrier\"}"); + Assert.AreEqual("Jack Russell Terrier", (annimal as Dog)?.Breed); + } + + [Test] + public void DeserializeObjectWithCustomMapping() + { + var annimal = + JsonConvert.DeserializeObject("{\"Sound\":\"Bark\",\"Breed\":\"Jack Russell Terrier\"}"); + Assert.AreEqual("Jack Russell Terrier", (annimal as Dog2)?.Breed); + } + + [Test] + public void DeserializeObjectMappingByPropertyPresence() + { + string json = + "[{\"Department\":\"Department1\",\"JobTitle\":\"JobTitle1\",\"FirstName\":\"FirstName1\",\"LastName\":\"LastName1\"}," + + "{\"Department\":\"Department1\",\"JobTitle\":\"JobTitle1\",\"FirstName\":\"FirstName1\",\"LastName\":\"LastName1\"}," + + "{\"Skill\":\"Painter\",\"FirstName\":\"FirstName1\",\"LastName\":\"LastName1\"}]"; + + + var persons = JsonConvert.DeserializeObject>(json); + Assert.AreEqual("Painter", (persons.Last() as Artist)?.Skill); + } + } + + [JsonConverter(typeof(JsonSubtypes), "Kind")] + public interface IAnimal + { + string Kind { get; } + } + + public class Dog : IAnimal + { + public Dog() + { + Kind = "Dog"; + } + + public string Kind { get; } + public string Breed { get; set; } + } + + class Cat : IAnimal + { + public Cat() + { + Kind = "Cat"; + } + + public string Kind { get; } + bool Declawed { get; set; } + } + + [JsonConverter(typeof(JsonSubtypes), "Sound")] + [JsonSubtypes.KnownSubType(typeof(Dog2), "Bark")] + [JsonSubtypes.KnownSubType(typeof(Cat2), "Meow")] + public class Animal2 + { + public virtual string Sound { get; } + public string Color { get; set; } + } + + public class Dog2 : Animal2 + { + public Dog2() + { + Sound = "Bark"; + } + + public override string Sound { get; } + public string Breed { get; set; } + } + + public class Cat2 : Animal2 + { + public Cat2() + { + Sound = "Meow"; + } + + public override string Sound { get; } + public bool Declawed { get; set; } + } + + [JsonConverter(typeof(JsonSubtypes))] + [JsonSubtypes.KnownSubTypeWithProperty(typeof(Employee), "JobTitle")] + [JsonSubtypes.KnownSubTypeWithProperty(typeof(Artist), "Skill")] + public class Person + { + public string FirstName { get; set; } + public string LastName { get; set; } + } + + public class Employee : Person + { + public string Department { get; set; } + public string JobTitle { get; set; } + } + + public class Artist : Person + { + public string Skill { get; set; } + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/Multimap.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/Multimap.mustache new file mode 100755 index 0000000000..7dd6e70354 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/Multimap.mustache @@ -0,0 +1,214 @@ +{{>partial_header}} + +using System; +using System.Collections; +{{^net35}}using System.Collections.Concurrent;{{/net35}} +using System.Collections.Generic; + +namespace {{packageName}}.Client +{ + /// + /// A dictionary in which one key has many associated values. + /// + /// The type of the key + /// The type of the value associated with the key. + public class Multimap : IDictionary> + { + #region Private Fields + + private readonly {{^net35}}Concurrent{{/net35}}Dictionary> _dictionary = + new {{^net35}}Concurrent{{/net35}}Dictionary>(); + + #endregion Private Fields + + #region Enumerators + + public IEnumerator>> GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + #endregion Enumerators + + #region Public Members + + public void Add(KeyValuePair> item) + { + if (!TryAdd(item.Key, item.Value)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + + public void Clear() + { + _dictionary.Clear(); + } + + public bool Contains(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + public void CopyTo(KeyValuePair>[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + public bool Remove(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + public int Count + { + get + { + return _dictionary.Count; + } + } + + public bool IsReadOnly + { + get + { + return false; + } + } + + public void Add(T key, IList value) + { + if (value != null && value.Count > 0) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + foreach (var k in value) list.Add(k); + } + else + { + list = new List(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + } + } + + public bool ContainsKey(T key) + { + return _dictionary.ContainsKey(key); + } + + public bool Remove(T key) + { + IList list; + return TryRemove(key, out list); + } + + public bool TryGetValue(T key, out IList value) + { + return _dictionary.TryGetValue(key, out value); + } + + public IList this[T key] + { + get + { + return _dictionary[key]; + } + set { _dictionary[key] = value; } + } + + public ICollection Keys + { + get + { + return _dictionary.Keys; + } + } + + public ICollection> Values + { + get + { + return _dictionary.Values; + } + } + + public void CopyTo(Array array, int index) + { + ((ICollection) _dictionary).CopyTo(array, index); + } + + public void Add(T key, TValue value) + { + if (value != null) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + list.Add(value); + } + else + { + list = new List(); + list.Add(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add value to Multimap."); + } + } + } + + #endregion Public Members + + #region Private Members + + /** + * Helper method to encapsulate generator differences between dictioary types. + */ + private bool TryRemove(T key, out IList value) + { + {{^net35}}return _dictionary.TryRemove(key, out value);{{/net35}} + {{#net35}}try + { + _dictionary.TryGetValue(key, out value); + _dictionary.Remove(key); + } +#pragma warning disable 168 + catch (ArgumentException e) +#pragma warning restore 168 + { + value = null; + return false; + } + + return true;{{/net35}} + } + + /** + * Helper method to encapsulate generator differences between dictioary types. + */ + private bool TryAdd(T key, IList value) + { + {{^net35}}return _dictionary.TryAdd(key, value);{{/net35}} + {{#net35}} + try + { + _dictionary.Add(key, value); + } +#pragma warning disable 168 + catch (ArgumentException e) +#pragma warning restore 168 + { + return false; + } + + return true; + {{/net35}} + } + #endregion Private Members + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/OpenAPIDateConverter.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/OpenAPIDateConverter.mustache new file mode 100644 index 0000000000..d790510257 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/OpenAPIDateConverter.mustache @@ -0,0 +1,21 @@ +{{>partial_header}} +using Newtonsoft.Json.Converters; + +namespace {{packageName}}.Client +{ + /// + /// Formatter for 'date' openapi formats ss defined by full-date - RFC3339 + /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types + /// + public class OpenAPIDateConverter : IsoDateTimeConverter + { + /// + /// Initializes a new instance of the class. + /// + public OpenAPIDateConverter() + { + // full-date = date-fullyear "-" date-month "-" date-mday + DateTimeFormat = "yyyy-MM-dd"; + } + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/Project.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/Project.mustache new file mode 100644 index 0000000000..572758d41d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/Project.mustache @@ -0,0 +1,119 @@ + + + + + {{#netStandard}}14.0{{/netStandard}} + Debug + AnyCPU + {{packageGuid}} + Library + Properties + {{packageName}} + {{packageName}} + {{#netStandard}} + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {{targetFramework}} + {{/netStandard}} + {{^netStandard}} + {{^supportsUWP}} + {{targetFramework}} + {{/supportsUWP}} + {{#supportsUWP}} + UAP + 10.0.10240.0 + 10.0.10240.0 + 14 + {{/supportsUWP}} + {{/netStandard}} + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + {{^netStandard}} + + + + + + + + + + + $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + {{binRelativePath}}\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + + + $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + ..\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + ..\..\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + {{binRelativePath}}\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + + + $(SolutionDir)\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + ..\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + ..\..\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + {{binRelativePath}}\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + + {{#generatePropertyChanged}} + + ..\..\packages\PropertyChanged.Fody.1.51.3\Lib\portable-net4+sl4+wp8+win8+wpa81+MonoAndroid16+MonoTouch40\PropertyChanged.dll + + {{/generatePropertyChanged}} + {{/netStandard}} + {{#netStandard}} + + + {{/netStandard}} + + + + + {{^netStandard}} + + + {{#generatePropertyChanged}} + + {{/generatePropertyChanged}} + + + {{#generatePropertyChanged}} + + {{/generatePropertyChanged}} + {{/netStandard}} + {{#netStandard}} + + + {{/netStandard}} + + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/README.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/README.mustache new file mode 100644 index 0000000000..ecd5a80e37 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/README.mustache @@ -0,0 +1,206 @@ +# {{packageName}} - the C# library for the {{appName}} + +{{#appDescription}} +{{{appDescription}}} +{{/appDescription}} + +This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: {{appVersion}} +- SDK version: {{packageVersion}} +{{^hideGenerationTimestamp}} +- Build date: {{generatedDate}} +{{/hideGenerationTimestamp}} +- Build package: {{generatorClass}} +{{#infoUrl}} + For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}}) +{{/infoUrl}} + + +## Frameworks supported +{{#netStandard}} +- .NET Core >=1.0 +- .NET Framework >=4.6 +- Mono/Xamarin >=vNext +- UWP >=10.0 +{{/netStandard}} +{{^netStandard}} +{{^supportsUWP}} +- .NET 4.0 or later +- Windows Phone 7.1 (Mango) +{{/supportsUWP}} +{{#supportsUWP}} +- UWP +{{/supportsUWP}} +{{/netStandard}} + + +## Dependencies +{{#netStandard}} +- FubarCoder.RestSharp.Portable.Core >=4.0.7 +- FubarCoder.RestSharp.Portable.HttpClient >=4.0.7 +- Newtonsoft.Json >=10.0.3 +{{/netStandard}} +{{^netStandard}} +- [RestSharp](https://www.nuget.org/packages/RestSharp) - 105.1.0 or later +- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/) - 7.0.0 or later +- [JsonSubTypes](https://www.nuget.org/packages/JsonSubTypes/) - 1.2.0 or later + +The DLLs included in the package may not be the latest version. We recommend using [NuGet](https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: +``` +Install-Package RestSharp +Install-Package Newtonsoft.Json +Install-Package JsonSubTypes +``` + +NOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See [RestSharp#742](https://github.com/restsharp/RestSharp/issues/742) +{{/netStandard}} + + +## Installation +{{#netStandard}} +Generate the DLL using your preferred tool +{{/netStandard}} +{{^netStandard}} +Run the following command to generate the DLL +- [Mac/Linux] `/bin/sh build.sh` +- [Windows] `build.bat` +{{/netStandard}} + +Then include the DLL (under the `bin` folder) in the C# project, and use the namespaces: +```csharp +using {{packageName}}.{{apiPackage}}; +using {{packageName}}.Client; +using {{packageName}}.{{modelPackage}}; +``` +{{^netStandard}} + +## Packaging + +A `.nuspec` is included with the project. You can follow the Nuget quickstart to [create](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#create-the-package) and [publish](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#publish-the-package) packages. + +This `.nuspec` uses placeholders from the `.csproj`, so build the `.csproj` directly: + +``` +nuget pack -Build -OutputDirectory out {{packageName}}.csproj +``` + +Then, publish to a [local feed](https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds) or [other host](https://docs.microsoft.com/en-us/nuget/hosting-packages/overview) and consume the new package via Nuget as usual. + +{{/netStandard}} + +## Getting Started + +```csharp +using System; +using System.Diagnostics; +using {{packageName}}.{{apiPackage}}; +using {{packageName}}.Client; +using {{packageName}}.{{modelPackage}}; + +namespace Example +{ + public class {{operationId}}Example + { + public void main() + { +{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}} + {{#hasAuthMethods}} + {{#authMethods}} + {{#isBasic}} + // Configure HTTP basic authorization: {{{name}}} + Configuration.Default.Username = "YOUR_USERNAME"; + Configuration.Default.Password = "YOUR_PASSWORD"; + {{/isBasic}} + {{#isApiKey}} + // Configure API key authorization: {{{name}}} + Configuration.Default.ApiKey.Add("{{{keyParamName}}}", "YOUR_API_KEY"); + // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed + // Configuration.Default.ApiKeyPrefix.Add("{{{keyParamName}}}", "Bearer"); + {{/isApiKey}} + {{#isOAuth}} + // Configure OAuth2 access token for authorization: {{{name}}} + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + {{/isOAuth}} + {{/authMethods}} + + {{/hasAuthMethods}} + var apiInstance = new {{classname}}(); + {{#allParams}} + {{#isPrimitiveType}} + var {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} + {{/isPrimitiveType}} + {{^isPrimitiveType}} + var {{paramName}} = new {{{dataType}}}(); // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} + {{/isPrimitiveType}} + {{/allParams}} + + try + { + {{#summary}} + // {{{.}}} + {{/summary}} + {{#returnType}}{{{.}}} result = {{/returnType}}apiInstance.{{{operationId}}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{#returnType}} + Debug.WriteLine(result);{{/returnType}} + } + catch (Exception e) + { + Debug.Print("Exception when calling {{classname}}.{{operationId}}: " + e.Message ); + } +{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}} + } + } +} +``` + + +## 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}} + + +## Documentation for Models + +{{#modelPackage}} +{{#models}}{{#model}} - [{{{modelPackage}}}.{{{classname}}}]({{modelDocPath}}{{{classname}}}.md) +{{/model}}{{/models}} +{{/modelPackage}} +{{^modelPackage}} +No model defined in this package +{{/modelPackage}} + + +## 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}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/ReadOnlyDictionary.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/ReadOnlyDictionary.mustache new file mode 100644 index 0000000000..1299b2436b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/ReadOnlyDictionary.mustache @@ -0,0 +1,137 @@ +{{>partial_header}} +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace {{packageName}}.Client +{ + public class ReadOnlyDictionary : IDictionary + { + private IDictionary _dictionaryImplementation; + public IEnumerator> GetEnumerator() + { + return _dictionaryImplementation.GetEnumerator(); + } + + public ReadOnlyDictionary() + { + _dictionaryImplementation = new Dictionary(); + } + + public ReadOnlyDictionary(IDictionary dictionaryImplementation) + { + if (dictionaryImplementation == null) throw new ArgumentNullException("dictionaryImplementation"); + _dictionaryImplementation = dictionaryImplementation; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable) _dictionaryImplementation).GetEnumerator(); + } + + public void Add(KeyValuePair item) + { + throw new ReadonlyOperationException("This instance is readonly."); + } + + public void Clear() + { + throw new ReadonlyOperationException("This instance is readonly."); + } + + public bool Contains(KeyValuePair item) + { + return _dictionaryImplementation.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + _dictionaryImplementation.CopyTo(array, arrayIndex); + } + + public bool Remove(KeyValuePair item) + { + throw new ReadonlyOperationException("This instance is readonly."); + } + + public int Count + { + get { return _dictionaryImplementation.Count; } + } + + public bool IsReadOnly + { + get { return true; } + } + + public void Add(T key, K value) + { + throw new ReadonlyOperationException("This instance is readonly."); + } + + public bool ContainsKey(T key) + { + return _dictionaryImplementation.ContainsKey(key); + } + + public bool Remove(T key) + { + throw new ReadonlyOperationException("This instance is readonly."); + } + + public bool TryGetValue(T key, out K value) + { + return _dictionaryImplementation.TryGetValue(key, out value); + } + + public K this[T key] + { + get { return _dictionaryImplementation[key]; } + set + { + throw new ReadonlyOperationException("This instance is readonly."); + + } + } + + public ICollection Keys + { + get { return _dictionaryImplementation.Keys; } + } + + public ICollection Values + { + get { return _dictionaryImplementation.Values; } + } + } + + [Serializable] + public class ReadonlyOperationException : Exception + { + // + // For guidelines regarding the creation of new exception types, see + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp + // and + // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp + // + + public ReadonlyOperationException() + { + } + + public ReadonlyOperationException(string message) : base(message) + { + } + + public ReadonlyOperationException(string message, Exception inner) : base(message, inner) + { + } + + protected ReadonlyOperationException( + SerializationInfo info, + StreamingContext context) : base(info, context) + { + } + } +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/RequestOptions.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/RequestOptions.mustache new file mode 100755 index 0000000000..224eb497d2 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/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-refactor/Solution.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/Solution.mustache new file mode 100644 index 0000000000..112cc3dc40 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/Solution.mustache @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio {{^netStandard}}2012{{/netStandard}}{{#netStandard}}14{{/netStandard}} +VisualStudioVersion = {{^netStandard}}12.0.0.0{{/netStandard}}{{#netStandard}}14.0.25420.1{{/netStandard}} +MinimumVisualStudioVersion = {{^netStandard}}10.0.0.1{{/netStandard}}{{#netStandard}}10.0.40219.1{{/netStandard}} +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "{{packageName}}", "src\{{packageName}}\{{packageName}}.csproj", "{{packageGuid}}" +EndProject +{{^excludeTests}}Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "{{testPackageName}}", "src\{{testPackageName}}\{{testPackageName}}.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}" +EndProject +{{/excludeTests}}Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {{packageGuid}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {{packageGuid}}.Debug|Any CPU.Build.0 = Debug|Any CPU + {{packageGuid}}.Release|Any CPU.ActiveCfg = Release|Any CPU + {{packageGuid}}.Release|Any CPU.Build.0 = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/TestProject.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/TestProject.mustache new file mode 100644 index 0000000000..9dfaf22f19 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/TestProject.mustache @@ -0,0 +1,101 @@ + + + + + Debug + AnyCPU + {19F1DEBC-DE5E-4517-8062-F000CD499087} + Library + Properties + {{testPackageName}} + {{testPackageName}} + {{^supportsUWP}} + {{targetFramework}} + {{/supportsUWP}} + {{#supportsUWP}} + UAP + 10.0.10240.0 + 10.0.10240.0 + 14 + {{/supportsUWP}} + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + {{binRelativePath}}\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll + + + $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + ..\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + ..\..\packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + {{binRelativePath}}\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll + + + $(SolutionDir)\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + ..\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + ..\..\packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + {{binRelativePath}}\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll + + + $(SolutionDir)\packages\NUnit.2.6.4\lib\nunit.framework.dll + ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll + {{binRelativePath}}\NUnit.2.6.4\lib\nunit.framework.dll + + + + + + + + + + + + {{packageGuid}} + {{packageName}} + + + + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/api.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/api.mustache new file mode 100644 index 0000000000..bf0e819dd4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/api.mustache @@ -0,0 +1,480 @@ +{{>partial_header}} + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using {{packageName}}.Client; +{{#hasImport}}using {{packageName}}.{{modelPackage}}; +{{/hasImport}} + +namespace {{packageName}}.{{apiPackage}} +{ + {{#operations}} + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + {{>visibility}} interface {{interfacePrefix}}{{classname}}Sync : IApiAccessor + { + #region Synchronous Operations + {{#operation}} + /// + /// {{summary}} + /// + /// + /// {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// {{#returnType}}{{returnType}}{{/returnType}} + {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{operationId}} ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + + /// + /// {{summary}} + /// + /// + /// {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// ApiResponse of {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Object(void){{/returnType}} + ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}> {{operationId}}WithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + {{/operation}} + #endregion Synchronous Operations + } + + {{#supportsAsync}} + /// + /// Represents a collection of functions to interact with the API endpoints + /// + {{>visibility}} interface {{interfacePrefix}}{{classname}}Async : IApiAccessor + { + #region Asynchronous Operations + {{#operation}} + /// + /// {{summary}} + /// + /// + /// {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// Task of {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}void{{/returnType}} + {{#returnType}}System.Threading.Tasks.Task<{{{returnType}}}>{{/returnType}}{{^returnType}}System.Threading.Tasks.Task{{/returnType}} {{operationId}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + + /// + /// {{summary}} + /// + /// + /// {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// Task of ApiResponse{{#returnType}} ({{returnType}}){{/returnType}} + System.Threading.Tasks.Task> {{operationId}}AsyncWithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + {{/operation}} + #endregion Asynchronous Operations + } + {{/supportsAsync}} + + {{>visibility}} interface {{interfacePrefix}}{{classname}} : {{interfacePrefix}}{{classname}}Sync{{#supportsAsync}}, {{interfacePrefix}}{{classname}}Async{{/supportsAsync}} + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + {{>visibility}} partial class {{classname}} : {{interfacePrefix}}{{classname}} + { + private {{packageName}}.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public {{classname}}() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public {{classname}}(String basePath) + { + this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( + {{packageName}}.Client.GlobalConfiguration.Instance, + new {{packageName}}.Client.Configuration { BasePath = basePath } + ); + this.Client = new {{packageName}}.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new {{packageName}}.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = {{packageName}}.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public {{classname}}({{packageName}}.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( + {{packageName}}.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new {{packageName}}.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new {{packageName}}.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = {{packageName}}.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access.{{#supportsAsync}} + /// The client interface for asynchronous API access.{{/supportsAsync}} + /// The configuration object. + public {{classname}}({{packageName}}.Client.ISynchronousClient client,{{#supportsAsync}}{{packageName}}.Client.IAsynchronousClient asyncClient,{{/supportsAsync}} {{packageName}}.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + {{#supportsAsync}} + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + {{/supportsAsync}} + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + {{#supportsAsync}} + this.AsynchronousClient = asyncClient; + {{/supportsAsync}} + this.Configuration = configuration; + this.ExceptionFactory = {{packageName}}.Client.Configuration.DefaultExceptionFactory; + } + + {{#supportsAsync}} + /// + /// The client for accessing this underlying API asynchronously. + /// + public {{packageName}}.Client.IAsynchronousClient AsynchronousClient { get; set; } + {{/supportsAsync}} + + /// + /// The client for accessing this underlying API synchronously. + /// + public {{packageName}}.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public {{packageName}}.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public {{packageName}}.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + {{#operation}} + /// + /// {{summary}} {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// {{#returnType}}{{returnType}}{{/returnType}} + public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{operationId}} ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + { + {{#returnType}}{{packageName}}.Client.ApiResponse<{{{returnType}}}> localVarResponse = {{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + return localVarResponse.Data;{{/returnType}}{{^returnType}}{{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{/returnType}} + } + + /// + /// {{summary}} {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// ApiResponse of {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Object(void){{/returnType}} + public {{packageName}}.Client.ApiResponse<{{#returnType}} {{{returnType}}} {{/returnType}}{{^returnType}}Object{{/returnType}}> {{operationId}}WithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + { + {{#allParams}} + {{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) + throw new {{packageName}}.Client.ApiException(400, "Missing required parameter '{{paramName}}' when calling {{classname}}->{{operationId}}"); + {{/required}} + {{/allParams}} + + {{packageName}}.Client.RequestOptions requestOptions = new {{packageName}}.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + {{#consumes}} + "{{{mediaType}}}"{{#hasMore}}, {{/hasMore}} + {{/consumes}} + }; + + // to determine the Accept header + String[] @accepts = new String[] { + {{#produces}} + "{{{mediaType}}}"{{#hasMore}},{{/hasMore}} + {{/produces}} + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + {{#pathParams}} + if ({{paramName}} != null) + requestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter + {{/pathParams}} + {{#queryParams}} + if ({{paramName}} != null) + { + foreach (var kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}})) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + {{/queryParams}} + {{#headerParams}} + if ({{paramName}} != null) + requestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter + {{/headerParams}} + {{#formParams}} + if ({{paramName}} != null) + { + {{#isFile}} + requestOptions.FileParameters.Add("{{baseName}}", {{paramName}}); + {{/isFile}} + {{^isFile}} + requestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter + {{/isFile}} + } + {{/formParams}} + {{#bodyParam}} + requestOptions.Data = {{paramName}}; + {{/bodyParam}} + + {{#authMethods}} + // authentication ({{name}}) required + {{#isApiKey}} + {{#isKeyInHeader}} + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + requestOptions.HeaderParameters.Add("{{keyParamName}}", this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}")); + } + {{/isKeyInHeader}} + {{#isKeyInQuery}} + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + foreach (var kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("", "{{keyParamName}}", this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + {{/isKeyInQuery}} + {{/isApiKey}} + {{#isBasic}} + // http basic authentication required + if (!String.IsNullOrEmpty(this.Configuration.Username) || !String.IsNullOrEmpty(this.Configuration.Password)) + { + requestOptions.HeaderParameters.Add("Authorization", "Basic " + {{packageName}}.Client.ClientUtils.Base64Encode(this.Configuration.Username + ":" + this.Configuration.Password)); + } + {{/isBasic}} + {{#isOAuth}} + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + {{/isOAuth}} + {{/authMethods}} + + // make the HTTP request + + var response = this.Client.{{#lambda.titlecase}}{{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}}{{/lambda.titlecase}}<{{#returnType}} {{{returnType}}} {{/returnType}}{{^returnType}}Object{{/returnType}}>("{{{path}}}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("{{operationId}}", response); + if (exception != null) throw exception; + } + + return response; + } + + {{#supportsAsync}} + /// + /// {{summary}} {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// Task of {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}void{{/returnType}} + {{#returnType}}public async System.Threading.Tasks.Task<{{{returnType}}}>{{/returnType}}{{^returnType}}public async System.Threading.Tasks.Task{{/returnType}} {{operationId}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + { + {{#returnType}}{{packageName}}.Client.ApiResponse<{{{returnType}}}> localVarResponse = await {{operationId}}AsyncWithHttpInfo({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + return localVarResponse.Data;{{/returnType}}{{^returnType}}await {{operationId}}AsyncWithHttpInfo({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{/returnType}} + + } + + /// + /// {{summary}} {{notes}} + /// + /// Thrown when fails to make API call + {{#allParams}}/// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}}/// Task of ApiResponse{{#returnType}} ({{returnType}}){{/returnType}} + public async System.Threading.Tasks.Task<{{packageName}}.Client.ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}>> {{operationId}}AsyncWithHttpInfo ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + { + {{#allParams}} + {{#required}} + // verify the required parameter '{{paramName}}' is set + if ({{paramName}} == null) + throw new {{packageName}}.Client.ApiException(400, "Missing required parameter '{{paramName}}' when calling {{classname}}->{{operationId}}"); + {{/required}} + {{/allParams}} + + {{packageName}}.Client.RequestOptions requestOptions = new {{packageName}}.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + {{#consumes}} + "{{{mediaType}}}"{{#hasMore}}, {{/hasMore}} + {{/consumes}} + }; + + // to determine the Accept header + String[] @accepts = new String[] { + {{#produces}} + "{{{mediaType}}}"{{#hasMore}},{{/hasMore}} + {{/produces}} + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + {{#pathParams}} + if ({{paramName}} != null) + requestOptions.PathParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // path parameter + {{/pathParams}} + {{#queryParams}} + if ({{paramName}} != null) + { + foreach (var kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}", "{{baseName}}", {{paramName}})) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + {{/queryParams}} + {{#headerParams}} + if ({{paramName}} != null) + requestOptions.HeaderParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // header parameter + {{/headerParams}} + {{#formParams}} + if ({{paramName}} != null) + { + {{#isFile}} + requestOptions.FileParameters.Add("{{baseName}}", {{paramName}}); + {{/isFile}} + {{^isFile}} + requestOptions.FormParameters.Add("{{baseName}}", {{packageName}}.Client.ClientUtils.ParameterToString({{paramName}})); // form parameter + {{/isFile}} + } + {{/formParams}} + {{#bodyParam}} + requestOptions.Data = {{paramName}}; + {{/bodyParam}} + + {{#authMethods}} + // authentication ({{name}}) required + {{#isApiKey}} + {{#isKeyInHeader}} + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + requestOptions.HeaderParameters.Add("{{keyParamName}}", this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}")); + } + {{/isKeyInHeader}} + {{#isKeyInQuery}} + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + foreach (var kvp in {{packageName}}.Client.ClientUtils.ParameterToMultiMap("", "{{keyParamName}}", this.Configuration.GetApiKeyWithPrefix("{{keyParamName}}"))) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + {{/isKeyInQuery}} + {{/isApiKey}} + {{#isBasic}} + // http basic authentication required + if (!String.IsNullOrEmpty(this.Configuration.Username) || !String.IsNullOrEmpty(this.Configuration.Password)) + { + requestOptions.HeaderParameters.Add("Authorization", "Basic " + {{packageName}}.Client.ClientUtils.Base64Encode(this.Configuration.Username + ":" + this.Configuration.Password)); + } + {{/isBasic}} + {{#isOAuth}} + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + {{/isOAuth}} + {{/authMethods}} + + // make the HTTP request + + var response = await this.AsynchronousClient.{{#lambda.titlecase}}{{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}}{{/lambda.titlecase}}Async<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}>("{{{path}}}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("{{operationId}}", response); + if (exception != null) throw exception; + } + + return response; + } + + {{/supportsAsync}} + {{/operation}} + } + {{/operations}} +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/api_doc.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/api_doc.mustache new file mode 100644 index 0000000000..60bde9985e --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/api_doc.mustache @@ -0,0 +1,105 @@ +# {{packageName}}.{{apiPackage}}.{{classname}}{{#description}} +{{description}}{{/description}} + +All URIs are relative to *{{{basePath}}}* + +Method | HTTP request | Description +------------- | ------------- | ------------- +{{#operations}}{{#operation}}[**{{operationId}}**]({{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}} +{{/operation}}{{/operations}} + +{{#operations}} +{{#operation}} + +# **{{{operationId}}}** +> {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{operationId}} ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = null{{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) + +{{{summary}}}{{#notes}} + +{{{notes}}}{{/notes}} + +### Example +```csharp +using System; +using System.Diagnostics; +using {{packageName}}.{{apiPackage}}; +using {{packageName}}.Client; +using {{packageName}}.{{modelPackage}}; + +namespace Example +{ + public class {{operationId}}Example + { + public void main() + { + {{#hasAuthMethods}} + {{#authMethods}} + {{#isBasic}} + // Configure HTTP basic authorization: {{{name}}} + Configuration.Default.Username = "YOUR_USERNAME"; + Configuration.Default.Password = "YOUR_PASSWORD"; + {{/isBasic}} + {{#isApiKey}} + // Configure API key authorization: {{{name}}} + Configuration.Default.AddApiKey("{{{keyParamName}}}", "YOUR_API_KEY"); + // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed + // Configuration.Default.AddApiKeyPrefix("{{{keyParamName}}}", "Bearer"); + {{/isApiKey}} + {{#isOAuth}} + // Configure OAuth2 access token for authorization: {{{name}}} + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + {{/isOAuth}} + {{/authMethods}} + + {{/hasAuthMethods}} + var apiInstance = new {{classname}}(); + {{#allParams}} + {{#isPrimitiveType}} + var {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} + {{/isPrimitiveType}} + {{^isPrimitiveType}} + var {{paramName}} = new {{{dataType}}}(); // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} + {{/isPrimitiveType}} + {{/allParams}} + + try + { + {{#summary}} + // {{{.}}} + {{/summary}} + {{#returnType}}{{returnType}} result = {{/returnType}}apiInstance.{{{operationId}}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});{{#returnType}} + Debug.WriteLine(result);{{/returnType}} + } + catch (Exception e) + { + Debug.Print("Exception when calling {{classname}}.{{operationId}}: " + e.Message ); + } + } + } +} +``` + +### Parameters +{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}} +Name | Type | Description | Notes +------------- | ------------- | ------------- | -------------{{/-last}}{{/allParams}} +{{#allParams}} **{{paramName}}** | {{#isFile}}**{{dataType}}**{{/isFile}}{{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isFile}}[**{{dataType}}**]({{#isContainer}}{{baseType}}{{/isContainer}}{{^isContainer}}{{dataType}}{{/isContainer}}.md){{/isFile}}{{/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}} + +### Authorization + +{{^authMethods}}No authorization required{{/authMethods}}{{#authMethods}}[{{{name}}}](../README.md#{{{name}}}){{^-last}}, {{/-last}}{{/authMethods}} + +### HTTP request headers + + - **Content-Type**: {{#consumes}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/consumes}}{{^consumes}}Not defined{{/consumes}} + - **Accept**: {{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}{{^produces}}Not defined{{/produces}} + +[[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) + +{{/operation}} +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/api_test.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/api_test.mustache new file mode 100644 index 0000000000..4b58b5b49f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/api_test.mustache @@ -0,0 +1,75 @@ +{{>partial_header}} +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using {{packageName}}.Client; +using {{packageName}}.{{apiPackage}}; +{{#hasImport}}using {{packageName}}.{{modelPackage}}; +{{/hasImport}} + +namespace {{packageName}}.Test +{ + /// + /// Class for testing {{classname}} + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class {{classname}}Tests + { + private {{classname}} instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new {{classname}}(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of {{classname}} + /// + [Test] + public void {{operationId}}InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' {{classname}} + //Assert.IsInstanceOfType(typeof({{classname}}), instance, "instance is a {{classname}}"); + } + + {{#operations}}{{#operation}} + /// + /// Test {{operationId}} + /// + [Test] + public void {{operationId}}Test() + { + // TODO uncomment below to test the method and replace null with proper value + {{#allParams}} + //{{{dataType}}} {{paramName}} = null; + {{/allParams}} + //{{#returnType}}var response = {{/returnType}}instance.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + {{#returnType}}//Assert.IsInstanceOf<{{{returnType}}}> (response, "response is {{{returnType}}}");{{/returnType}} + } + {{/operation}}{{/operations}} + } + +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/compile-mono.sh.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/compile-mono.sh.mustache new file mode 100644 index 0000000000..ce3fbe0b8a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/compile-mono.sh.mustache @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# + +frameworkVersion={{targetFrameworkNuget}} + +# sdk must match installed framworks under PREFIX/lib/mono/[value] +sdk={{x-mcs-sdk}} + +# langversion refers to C# language features. see man mcs for details. +langversion=${sdk} +nuget_cmd=nuget + +# Match against our known SDK possibilities +case "${sdk}" in + 4) + langversion=4 + ;; + 4.5*) + langversion=5 + ;; + 4.6*) + langversion=6 + ;; + 4.7*) + langversion=7 # ignoring 7.1 for now. + ;; + *) + langversion=6 + ;; +esac + +echo "[INFO] Target framework: ${frameworkVersion}" + +if ! type nuget &>/dev/null; then + echo "[INFO] Download nuget and packages" + wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe; + nuget_cmd="mono nuget.exe" +fi + +mozroots --import --sync +${nuget_cmd} install src/{{packageName}}/packages.config -o packages; + +echo "[INFO] Copy DLLs to the 'bin' folder" +mkdir -p bin; +cp packages/Newtonsoft.Json.10.0.3/lib/{{targetFrameworkNuget}}/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; +cp packages/RestSharp.105.1.0/lib/{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}/RestSharp.dll bin/RestSharp.dll; +cp packages/JsonSubTypes.1.2.0/lib/{{targetFrameworkNuget}}/JsonSubTypes.dll bin/JsonSubTypes.dll +{{#generatePropertyChanged}} +cp packages/Fody.1.29.4/Fody.dll bin/Fody.dll +cp packages/PropertyChanged.Fody.1.51.3/PropertyChanged.Fody.dll bin/PropertyChanged.Fody.dll +cp packages/PropertyChanged.Fody.1.51.3/Lib/dotnet/PropertyChanged.dll bin/PropertyChanged.dll +{{/generatePropertyChanged}} + +echo "[INFO] Run 'mcs' to build bin/{{{packageName}}}.dll" +mcs -langversion:${langversion} -sdk:${sdk} -r:bin/Newtonsoft.Json.dll,bin/JsonSubTypes.dll,\ +{{#generatePropertyChanged}} +bin/Fody.dll,\ +bin/PropertyChanged.Fody.dll,\ +bin/PropertyChanged.dll,\ +{{/generatePropertyChanged}} +bin/RestSharp.dll,\ +System.ComponentModel.DataAnnotations.dll,\ +System.Runtime.Serialization.dll \ +-target:library \ +-out:bin/{{packageName}}.dll \ +-recurse:'src/{{packageName}}/*.cs' \ +-doc:bin/{{packageName}}.xml \ +-platform:anycpu + +if [ $? -ne 0 ] +then + echo "[ERROR] Compilation failed with exit code $?" + exit 1 +else + echo "[INFO] bin/{{{packageName}}}.dll was created successfully" +fi diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/compile.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/compile.mustache new file mode 100644 index 0000000000..a0c9c0aaa4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/compile.mustache @@ -0,0 +1,27 @@ +:: Generated by: https://github.com/openapitools/openapi-generator.git +:: + +@echo off + +{{#supportsAsync}} +SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319 +{{/supportsAsync}} +{{^supportsAsync}} +SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v3.5 +{{/supportsAsync}} + +if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '.\nuget.exe')" +.\nuget.exe install src\{{packageName}}\packages.config -o packages + +if not exist ".\bin" mkdir bin + +copy packages\Newtonsoft.Json.10.0.3\lib\{{targetFrameworkNuget}}\Newtonsoft.Json.dll bin\Newtonsoft.Json.dll +copy packages\JsonSubTypes.1.2.0\lib\{{targetFrameworkNuget}}\JsonSubTypes.dll bin\JsonSubTypes.dll +copy packages\RestSharp.105.1.0\lib\{{#isNet40}}net4{{/isNet40}}{{^isNet40}}{{targetFrameworkNuget}}{{/isNet40}}\RestSharp.dll bin\RestSharp.dll +{{#generatePropertyChanged}} +copy packages\Fody.1.29.4\Fody.dll bin\Fody.dll +copy packages\PropertyChanged.Fody.1.51.3\PropertyChanged.Fody.dll bin\PropertyChanged.Fody.dll +copy packages\PropertyChanged.Fody.1.51.3\Lib\dotnet\PropertyChanged.dll bin\PropertyChanged.dll +{{/generatePropertyChanged}} +%CSCPATH%\csc /reference:bin\Newtonsoft.Json.dll;bin\JsonSubTypes.dll;bin\RestSharp.dll;System.ComponentModel.DataAnnotations.dll {{#generatePropertyChanged}}/r:bin\Fody.dll;bin\PropertyChanged.Fody.dll;bin\PropertyChanged.dll{{/generatePropertyChanged}} /target:library /out:bin\{{packageName}}.dll /recurse:src\{{packageName}}\*.cs /doc:bin\{{packageName}}.xml + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/enumClass.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/enumClass.mustache new file mode 100644 index 0000000000..de8c602a14 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/enumClass.mustache @@ -0,0 +1,20 @@ + /// + /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}} + /// + {{#description}} + /// {{description}} + {{/description}} + [JsonConverter(typeof(StringEnumConverter))] + {{>visibility}} enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} + { + {{#allowableValues}} + {{#enumVars}} + /// + /// Enum {{name}} for {{{value}}} + /// + [EnumMember(Value = {{#isLong}}"{{/isLong}}{{#isInteger}}"{{/isInteger}}{{#isFloat}}"{{/isFloat}}{{#isDouble}}"{{/isDouble}}{{{value}}}{{#isLong}}"{{/isLong}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isFloat}}"{{/isFloat}})] + {{name}}{{#isLong}} = {{{value}}}{{/isLong}}{{#isInteger}} = {{{value}}}{{/isInteger}}{{^isInteger}} = {{-index}}{{/isInteger}}{{^-last}},{{/-last}} + + {{/enumVars}} + {{/allowableValues}} + } diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/git_push.sh.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/git_push.sh.mustache new file mode 100755 index 0000000000..e9c7bdb802 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/git_push.sh.mustache @@ -0,0 +1,52 @@ +#!/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-petstore-perl "minor update" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 + +if [ "$git_user_id" = "" ]; then + git_user_id="{{{gitUserId}}}" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="{{{gitRepoId}}}" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="{{{releaseNote}}}" + 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://github.com/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${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://github.com/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/gitignore.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/gitignore.mustache new file mode 100644 index 0000000000..17302c93bf --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/gitignore.mustache @@ -0,0 +1,186 @@ +# Ref: https://gist.github.com/kmorcinek/2710267 +# Download this file using PowerShell v3 under Windows with the following comand +# Invoke-WebRequest https://gist.githubusercontent.com/kmorcinek/2710267/raw/ -OutFile .gitignore + +# User-specific files +*.suo +*.user +*.sln.docstates +./nuget + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# OS generated files # +.DS_Store* +ehthumbs.db +Icon? +Thumbs.db + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings +modulesbin/ +tempbin/ + +# EPiServer Site file (VPP) +AppData/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# vim +*.txt~ +*.swp +*.swo + +# svn +.svn + +# SQL Server files +**/App_Data/*.mdf +**/App_Data/*.ldf +**/App_Data/*.sdf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# SASS Compiler cache +.sass-cache + +# Visual Studio 2014 CTP +**/*.sln.ide diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/model.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/model.mustache new file mode 100644 index 0000000000..99011ebc62 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/model.mustache @@ -0,0 +1,39 @@ +{{>partial_header}} + +using System; +using System.Linq; +using System.IO; +using System.Text; +{{^netStandard}} +using System.Text.RegularExpressions; +{{/netStandard}} +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +{{#models}} +{{#model}} +{{#discriminator}} +using JsonSubTypes; +{{/discriminator}} +{{/model}} +{{/models}} +{{^netStandard}} +{{#generatePropertyChanged}} +using PropertyChanged; +using System.ComponentModel; +{{/generatePropertyChanged}} +using System.ComponentModel.DataAnnotations; +{{/netStandard}} +using OpenAPIDateConverter = {{packageName}}.Client.OpenAPIDateConverter; + +{{#models}} +{{#model}} +namespace {{packageName}}.{{modelPackage}} +{ +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>modelGeneric}}{{/isEnum}} +{{/model}} +{{/models}} +} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/modelEnum.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/modelEnum.mustache new file mode 100644 index 0000000000..c1a70a37f2 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/modelEnum.mustache @@ -0,0 +1,24 @@ + /// + /// {{^description}}Defines {{{name}}}{{/description}}{{#description}}{{description}}{{/description}} + /// + {{#description}} + /// {{description}} + {{/description}} + {{#allowableValues}}{{#enumVars}}{{#-first}}{{#isString}} + [JsonConverter(typeof(StringEnumConverter))] + {{/isString}}{{/-first}}{{/enumVars}}{{/allowableValues}} + {{>visibility}} enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-enum-byte}}: byte{{/vendorExtensions.x-enum-byte}} + { + {{#allowableValues}} + {{#enumVars}} + /// + /// Enum {{name}} for value: {{{value}}} + /// + {{#isString}} + [EnumMember(Value = "{{{value}}}")] + {{/isString}} + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}},{{/-last}} + + {{/enumVars}} + {{/allowableValues}} + }{{! NOTE: This model's enumVars is modified to look like CodegenProperty}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/modelGeneric.mustache new file mode 100644 index 0000000000..89d35b73ec --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/modelGeneric.mustache @@ -0,0 +1,306 @@ + /// + /// {{#description}}{{.}}{{/description}}{{^description}}{{classname}}{{/description}} + /// + [DataContract] + {{#discriminator}} + [JsonConverter(typeof(JsonSubtypes), "{{{discriminatorName}}}")]{{#children}} + [JsonSubtypes.KnownSubType(typeof({{classname}}), "{{^vendorExtensions.x-discriminator-value}}{{name}}{{/vendorExtensions.x-discriminator-value}}{{#vendorExtensions.x-discriminator-value}}{{{vendorExtensions.x-discriminator-value}}}{{/vendorExtensions.x-discriminator-value}}")]{{/children}} + {{/discriminator}} + {{#generatePropertyChanged}} + [ImplementPropertyChanged] + {{/generatePropertyChanged}} + {{>visibility}} partial class {{classname}} : {{#parent}}{{{parent}}}, {{/parent}} IEquatable<{{classname}}>{{^netStandard}}{{#validatable}}, IValidatableObject{{/validatable}}{{/netStandard}} + { + {{#vars}} + {{#items.isEnum}} + {{#items}} + {{^complexType}} +{{>modelInnerEnum}} + {{/complexType}} + {{/items}} + {{/items.isEnum}} + {{#isEnum}} + {{^complexType}} +{{>modelInnerEnum}} + {{/complexType}} + {{/isEnum}} + {{#isEnum}} + /// + /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}} + /// + {{#description}} + /// {{description}} + {{/description}} + [DataMember(Name="{{baseName}}", EmitDefaultValue={{emitDefaultValue}})] + public {{#complexType}}{{{complexType}}}{{/complexType}}{{^complexType}}{{{datatypeWithEnum}}}{{/complexType}}{{^isContainer}}{{^required}}?{{/required}}{{/isContainer}} {{name}} { get; set; } + {{/isEnum}} + {{/vars}} + {{#hasRequired}} + {{^hasOnlyReadOnly}} + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected {{classname}}() { } + {{/hasOnlyReadOnly}} + {{/hasRequired}} + /// + /// Initializes a new instance of the class. + /// + {{#vars}} + {{^isReadOnly}} + /// {{#description}}{{description}}{{/description}}{{^description}}{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}{{/description}}{{#required}} (required){{/required}}{{#defaultValue}} (default to {{defaultValue}}){{/defaultValue}}. + {{/isReadOnly}} + {{/vars}} + {{#hasOnlyReadOnly}} + [JsonConstructorAttribute] + {{/hasOnlyReadOnly}} + public {{classname}}({{#readWriteVars}}{{{datatypeWithEnum}}}{{#isEnum}}{{^isContainer}}{{^required}}?{{/required}}{{/isContainer}}{{/isEnum}} {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}default({{{datatypeWithEnum}}}{{#isEnum}}{{^isContainer}}{{^required}}?{{/required}}{{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^-last}}, {{/-last}}{{/readWriteVars}}){{#parent}} : base({{#parentVars}}{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}{{#hasMore}}, {{/hasMore}}{{/parentVars}}){{/parent}} + { + {{#vars}} + {{^isInherited}} + {{^isReadOnly}} + {{#required}} + // to ensure "{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}" is required (not null) + if ({{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} == null) + { + throw new InvalidDataException("{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} is a required property for {{classname}} and cannot be null"); + } + else + { + this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}; + } + {{/required}} + {{/isReadOnly}} + {{/isInherited}} + {{/vars}} + {{#vars}} + {{^isInherited}} + {{^isReadOnly}} + {{^required}} + {{#defaultValue}}// use default value if no "{{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}" provided + if ({{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}} == null) + { + this.{{name}} = {{{defaultValue}}}; + } + else + { + this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}; + } + {{/defaultValue}} + {{^defaultValue}} +this.{{name}} = {{#lambda.camelcase_param}}{{name}}{{/lambda.camelcase_param}}; + {{/defaultValue}} + {{/required}} + {{/isReadOnly}} + {{/isInherited}} + {{/vars}} + } + + {{#vars}} + {{^isInherited}} + {{^isEnum}} + /// + /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}} + /// {{#description}} + /// {{description}}{{/description}} + [DataMember(Name="{{baseName}}", EmitDefaultValue={{emitDefaultValue}})]{{#isDate}} + [JsonConverter(typeof(OpenAPIDateConverter))]{{/isDate}} + public {{{dataType}}} {{name}} { get; {{#isReadOnly}}private {{/isReadOnly}}set; } + {{/isEnum}} + {{/isInherited}} + + {{/vars}} + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class {{classname}} {\n"); + {{#parent}} + sb.Append(" ").Append(base.ToString().Replace("\n", "\n ")).Append("\n"); + {{/parent}} + {{#vars}} + sb.Append(" {{name}}: ").Append({{name}}).Append("\n"); + {{/vars}} + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public {{#parent}}{{^isArrayModel}}{{^isMapModel}}override {{/isMapModel}}{{/isArrayModel}}{{/parent}}{{^parent}}virtual {{/parent}}string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as {{classname}}); + } + + /// + /// Returns true if {{classname}} instances are equal + /// + /// Instance of {{classname}} to be compared + /// Boolean + public bool Equals({{classname}} input) + { + if (input == null) + return false; + + return {{#vars}}{{#parent}}base.Equals(input) && {{/parent}}{{#isNotContainer}} + ( + this.{{name}} == input.{{name}} || + (this.{{name}} != null && + this.{{name}}.Equals(input.{{name}})) + ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{^isNotContainer}} + ( + this.{{name}} == input.{{name}} || + this.{{name}} != null && + this.{{name}}.SequenceEqual(input.{{name}}) + ){{#hasMore}} && {{/hasMore}}{{/isNotContainer}}{{/vars}}{{^vars}}{{#parent}}base.Equals(input){{/parent}}{{^parent}}false{{/parent}}{{/vars}}; + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + {{#parent}} + int hashCode = base.GetHashCode(); + {{/parent}} + {{^parent}} + int hashCode = 41; + {{/parent}} + {{#vars}} + if (this.{{name}} != null) + hashCode = hashCode * 59 + this.{{name}}.GetHashCode(); + {{/vars}} + return hashCode; + } + } +{{^netStandard}} + +{{#generatePropertyChanged}} + /// + /// Property changed event handler + /// + public event PropertyChangedEventHandler PropertyChanged; + + /// + /// Trigger when a property changed + /// + /// Property Name + public virtual void OnPropertyChanged(string propertyName) + { + // NOTE: property changed is handled via "code weaving" using Fody. + // Properties with setters are modified at compile time to notify of changes. + var propertyChanged = PropertyChanged; + if (propertyChanged != null) + { + propertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + +{{/generatePropertyChanged}} +{{#validatable}} +{{#discriminator}} + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + return this.BaseValidate(validationContext); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + protected IEnumerable BaseValidate(ValidationContext validationContext) + { +{{/discriminator}} +{{^discriminator}} + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { +{{/discriminator}} + {{#parent}} + {{^isArrayModel}} + {{^isMapModel}} + foreach(var x in BaseValidate(validationContext)) yield return x; + {{/isMapModel}} + {{/isArrayModel}} + {{/parent}} + {{#vars}} + {{#hasValidation}} + {{#maxLength}} + // {{{name}}} ({{{dataType}}}) maxLength + if(this.{{{name}}} != null && this.{{{name}}}.Length > {{maxLength}}) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, length must be less than {{maxLength}}.", new [] { "{{{name}}}" }); + } + + {{/maxLength}} + {{#minLength}} + // {{{name}}} ({{{dataType}}}) minLength + if(this.{{{name}}} != null && this.{{{name}}}.Length < {{minLength}}) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, length must be greater than {{minLength}}.", new [] { "{{{name}}}" }); + } + + {{/minLength}} + {{#maximum}} + // {{{name}}} ({{{dataType}}}) maximum + if(this.{{{name}}} > ({{{dataType}}}){{maximum}}) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must be a value less than or equal to {{maximum}}.", new [] { "{{{name}}}" }); + } + + {{/maximum}} + {{#minimum}} + // {{{name}}} ({{{dataType}}}) minimum + if(this.{{{name}}} < ({{{dataType}}}){{minimum}}) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must be a value greater than or equal to {{minimum}}.", new [] { "{{{name}}}" }); + } + + {{/minimum}} + {{#pattern}} + {{^isByteArray}} + // {{{name}}} ({{{dataType}}}) pattern + Regex regex{{{name}}} = new Regex(@"{{{vendorExtensions.x-regex}}}"{{#vendorExtensions.x-modifiers}}{{#-first}}, {{/-first}}RegexOptions.{{{.}}}{{^-last}} | {{/-last}}{{/vendorExtensions.x-modifiers}}); + if (false == regex{{{name}}}.Match(this.{{{name}}}).Success) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must match a pattern of " + regex{{{name}}}, new [] { "{{{name}}}" }); + } + + {{/isByteArray}} + {{/pattern}} + {{/hasValidation}} + {{/vars}} + yield break; + } +{{/validatable}} +{{/netStandard}} + } diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/modelInnerEnum.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/modelInnerEnum.mustache new file mode 100644 index 0000000000..d9e96dccdb --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/modelInnerEnum.mustache @@ -0,0 +1,26 @@ + {{^isContainer}} + /// + /// {{^description}}Defines {{{name}}}{{/description}}{{#description}}{{description}}{{/description}} + /// + {{#description}} + /// {{description}} + {{/description}} + {{#isString}} + [JsonConverter(typeof(StringEnumConverter))] + {{/isString}} + {{>visibility}} enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-enum-byte}}: byte{{/vendorExtensions.x-enum-byte}} + { + {{#allowableValues}} + {{#enumVars}} + /// + /// Enum {{name}} for value: {{{value}}} + /// + {{#isString}} + [EnumMember(Value = "{{{value}}}")] + {{/isString}} + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}},{{/-last}} + + {{/enumVars}} + {{/allowableValues}} + } + {{/isContainer}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/model_doc.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/model_doc.mustache new file mode 100644 index 0000000000..22141b671a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/model_doc.mustache @@ -0,0 +1,19 @@ +{{#models}} +{{#model}} +# {{{packageName}}}.{{modelPackage}}.{{{classname}}} +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +{{#parent}} +{{#parentVars}} +**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}} +{{/parentVars}} +{{/parent}} +{{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#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) + +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/model_test.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/model_test.mustache new file mode 100644 index 0000000000..8bdab50696 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/model_test.mustache @@ -0,0 +1,90 @@ +{{>partial_header}} + +using NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using {{packageName}}.{{apiPackage}}; +using {{packageName}}.{{modelPackage}}; +using {{packageName}}.Client; +using System.Reflection; +using Newtonsoft.Json; + +{{#models}} +{{#model}} +namespace {{packageName}}.Test +{ + /// + /// Class for testing {{classname}} + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class {{classname}}Tests + { + // TODO uncomment below to declare an instance variable for {{classname}} + //private {{classname}} instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of {{classname}} + //instance = new {{classname}}(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of {{classname}} + /// + [Test] + public void {{classname}}InstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" {{classname}} + //Assert.IsInstanceOfType<{{classname}}> (instance, "variable 'instance' is a {{classname}}"); + } + + {{#discriminator}} + {{#children}} + /// + /// Test deserialize a {{classname}} from type {{parent}} + /// + [Test] + public void {{classname}}DeserializeFrom{{parent}}Test() + { + // TODO uncomment below to test deserialize a {{classname}} from type {{parent}} + //Assert.IsInstanceOf<{{parent}}>(JsonConvert.DeserializeObject<{{parent}}>(new {{classname}}().ToJson())); + } + {{/children}} + {{/discriminator}} + + {{#vars}} + /// + /// Test the property '{{name}}' + /// + [Test] + public void {{name}}Test() + { + // TODO unit test for the property '{{name}}' + } + {{/vars}} + + } + +} +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/mono_nunit_test.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/mono_nunit_test.mustache new file mode 100644 index 0000000000..f3e03dc803 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/mono_nunit_test.mustache @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# + +wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe +mozroots --import --sync + +echo "[INFO] remove bin/Debug/{{{packageName}}}.Test.dll" +rm src/{{{packageName}}}.Test/bin/Debug/{{{packageName}}}.Test.dll 2> /dev/null + +echo "[INFO] install NUnit runners via NuGet" +wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe +mozroots --import --sync +mono nuget.exe install src/{{{packageName}}}.Test/packages.config -o packages + +echo "[INFO] Install NUnit runners via NuGet" +mono nuget.exe install NUnit.Runners -Version 2.6.4 -OutputDirectory packages + +echo "[INFO] Build the solution and run the unit test" +xbuild {{{packageName}}}.sln && \ + mono ./packages/NUnit.Runners.2.6.4/tools/nunit-console.exe src/{{{packageName}}}.Test/bin/Debug/{{{packageName}}}.Test.dll diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_project.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_project.mustache new file mode 100644 index 0000000000..4d0e27a7b9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_project.mustache @@ -0,0 +1,46 @@ + + + + {{targetFrameworkNuget}} + {{packageName}} + {{packageName}} + Library + {{packageAuthors}} + {{packageCompany}} + {{packageTitle}} + {{packageDescription}} + {{packageCopyright}} + true + true + true + {{packageName}} + {{packageVersion}} + + + + {{#netStandard}} + + + {{/netStandard}} + {{^netStandard}} + + {{/netStandard}} + + + + + {{^netStandard}} + + + + + + + + + + + + {{/netStandard}} + + \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_testproject.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_testproject.mustache new file mode 100644 index 0000000000..cf00f15a8d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/netcore_testproject.mustache @@ -0,0 +1,49 @@ + + + + {{targetFrameworkNuget}} + {{testPackageName}} + {{testPackageName}} + Library + {{packageAuthors}} + {{packageCompany}} + {{packageTitle}} + {{packageDescription}} + {{packageCopyright}} + true + true + true + {{testPackageName}} + + + + + {{#netStandard}} + + {{/netStandard}} + {{^netStandard}} + + {{/netStandard}} + + + + + {{^netStandard}} + + + + + + + + + + + + {{/netStandard}} + + + + + + \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/nuspec.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/nuspec.mustache new file mode 100644 index 0000000000..e061877340 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/nuspec.mustache @@ -0,0 +1,53 @@ + + + + + $id$ + {{packageTitle}} + + + $version$ + + + $author$ + + + $author$ + false + false + + + {{packageDescription}} + {{#termsOfService}} + {{termsOfService}} + {{/termsOfService}} + {{#licenseUrl}} + {{licenseUrl}} + {{/licenseUrl}} + + + + + + + + {{#generatePropertyChanged}} + + + {{/generatePropertyChanged}} + + + + + + + + + {{#generatePropertyChanged}} + + {{/generatePropertyChanged}} + + + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/packages.config.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/packages.config.mustache new file mode 100644 index 0000000000..57234ce284 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/packages.config.mustache @@ -0,0 +1,10 @@ + + + + + + {{#generatePropertyChanged}} + + + {{/generatePropertyChanged}} + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/packages_test.config.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/packages_test.config.mustache new file mode 100644 index 0000000000..5e08ad3b67 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/packages_test.config.mustache @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/partial_header.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/partial_header.mustache new file mode 100644 index 0000000000..911714bcac --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/partial_header.mustache @@ -0,0 +1,13 @@ +/* + {{#appName}} + * {{{appName}}} + * + {{/appName}} + {{#appDescription}} + * {{{appDescription}}} + * + {{/appDescription}} + * {{#version}}OpenAPI spec version: {{{version}}}{{/version}} + * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} + * Generated by: https://github.com/openapitools/openapi-generator.git + */ diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/project.json.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/project.json.mustache new file mode 100644 index 0000000000..194fdda449 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/project.json.mustache @@ -0,0 +1,12 @@ +{ + "supports": {}, + "dependencies": { + "FubarCoder.RestSharp.Portable.Core": "4.0.7", + "FubarCoder.RestSharp.Portable.HttpClient": "4.0.7", + "Newtonsoft.Json": "10.0.3", + "JsonSubTypes": "1.2.0" + }, + "frameworks": { + "{{targetFrameworkNuget}}": {} + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/travis.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/travis.mustache new file mode 100644 index 0000000000..645c72d06d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/travis.mustache @@ -0,0 +1,9 @@ +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# +language: csharp +mono: + - latest +solution: {{{packageName}}}.sln +script: + - /bin/sh ./mono_nunit_test.sh diff --git a/modules/openapi-generator/src/main/resources/csharp-refactor/visibility.mustache b/modules/openapi-generator/src/main/resources/csharp-refactor/visibility.mustache new file mode 100644 index 0000000000..a1d1f4163d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-refactor/visibility.mustache @@ -0,0 +1 @@ +{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.gitignore b/samples/client/petstore/csharp-refactor/OpenAPIClient/.gitignore new file mode 100644 index 0000000000..17302c93bf --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/.gitignore @@ -0,0 +1,186 @@ +# Ref: https://gist.github.com/kmorcinek/2710267 +# Download this file using PowerShell v3 under Windows with the following comand +# Invoke-WebRequest https://gist.githubusercontent.com/kmorcinek/2710267/raw/ -OutFile .gitignore + +# User-specific files +*.suo +*.user +*.sln.docstates +./nuget + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# OS generated files # +.DS_Store* +ehthumbs.db +Icon? +Thumbs.db + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings +modulesbin/ +tempbin/ + +# EPiServer Site file (VPP) +AppData/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# vim +*.txt~ +*.swp +*.swo + +# svn +.svn + +# SQL Server files +**/App_Data/*.mdf +**/App_Data/*.ldf +**/App_Data/*.sdf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# SASS Compiler cache +.sass-cache + +# Visual Studio 2014 CTP +**/*.sln.ide diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator-ignore b/samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator-ignore new file mode 100644 index 0000000000..7484ee590a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/.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/csharp-refactor/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator/VERSION new file mode 100644 index 0000000000..e24c1f857e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/.openapi-generator/VERSION @@ -0,0 +1 @@ +3.3.3-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.travis.yml b/samples/client/petstore/csharp-refactor/OpenAPIClient/.travis.yml new file mode 100644 index 0000000000..e4965fc7e5 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/.travis.yml @@ -0,0 +1,9 @@ +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# +language: csharp +mono: + - latest +solution: Org.OpenAPITools.sln +script: + - /bin/sh ./mono_nunit_test.sh diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/UserPrefs.xml b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/UserPrefs.xml new file mode 100644 index 0000000000..4507171116 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/UserPrefs.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/db.lock b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/db.lock new file mode 100644 index 0000000000..e69de29bb2 diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide new file mode 100644 index 0000000000000000000000000000000000000000..88b4c44d287e68f76e67e62169f421611ae82722 GIT binary patch literal 421888 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%0DW|9mqc2bpupBuCk+m7d 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-shm b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-shm new file mode 100644 index 0000000000000000000000000000000000000000..7381c4cbb96edf138d1d1757d57a9f5e6fae10df GIT binary patch literal 32768 zcmeI53ABz?7svnq|25B2nF>)F4P}T(DjAxE6yXv@lsQQu5+S9~q?ruSD5;P#MRRB# zC37VdntW&XIqN&?UHA1~tv)W!v+QfX`|Pv#IlsN1=UUc!pHpmQ1=ux#fcsOZP#Q4M zeQr2oakm|thS%OXesIt1HOp^VRc>a{J`*?REw+dL7Tc~oF7D3Y`mgnWKix30IVt3% zu#?74u6APfR+-S-2R@;0FTZh2M?9H4scXD}Px6eLrGM{#VPpF%}tu@_AD!XI- z_uev^({b0B#R=Ea#C`T_HhUN&ajes>ak;;Zq0PHymu@*j&Sno|C60C8HP33|V;HAY zdi%g9)GdEl6CbB_;GayleR=<6y2bWBmdonv^O@cD>baP`ixXpHYxH{J8ofQy$H%s{ zc%Lw4s9SG%pHR14zHh8Yy-#TOdBZySIezR~H`n%&9>lPk`FP3n#GKZ<-sWTa&mlYO zf$N-D&QP~?`#v>3-pAJK^>A;-&fC)iJ)=0`{u6U_b#uEp>Fy+PO`es{<$d5FYl8~ zx4hmb*&34B!f@Qs>*-F<$jAD}`y|utcZ>JQNDtW=i|d`( zx)OEI$ky$BY|qJbV{dCR7T(A9=yiMMgnLS5w^-gM)Gd#3P0W?4J0A0yO#-`iZPpZ77=riXmZc7qd(7wYz$FgA9NS`6=FHm@i1DIE9|a=LwP z?8LbHxykIt&HE&B^mgy#871!5{Q5fajQl)fV6OYUbUFU$^7~`v3SP8&kOZ1US@Jy?R=cDw&5DB-rmQ@^!@7XVct+T zzTT&W)9rJ*6XRg^ke!X)9%(7leoWB_OOn|-TRw8QMY~MbaJzk z{!Rus8R#Tlkw7F62}A;sKqL?eL;{gOBoGNi0+B!@5D7#Akw7F62}A;sKqL?eL;{gO zBoGNi0+B!@5D7#Akw7F62}A;sKqL?eL;{gOBoGNi0+B!@5D7#Ak-))Cpd-%Whg`u= z_#5-9kPg$;8lqvkQ?xG<#VZon?+BcZ3vnshVm#i$2IS>A9LX_!h2QaL)zY;Zu7~xh z^1A+h6i;9Zrr~+Kh*@|QbFlzR@c~xg6MT-Z@GVwj{eHLq|Hpz$qa2RI`Do(4zuL`x zhx$kSj9-z91$j76WF=PR0N&2K_ynKhYOdo(-l50sbqw*^%LJO^A#6l_j^!%W)(Cx; zvgD2wq3mSR~R z&Et3iPhth0%qpzL>a4+k>6nOSM&dU8C#NTQ{hm`s)_ms-YUGGB_Uh;Tdd0ZWdx? zUdgN2iTyZ`w{il1;N7}U59$#;sVSPKXY`_G=~cb11zM_i^uCtqbA6?6wMuKWR_nDv zKj=qo(iZK|PGwKa75}BV$9?9M(csiSn97RTp)hER*Sw-SuO{dfdV;#thVOSq6-*pB99q~o-`MIc|MpVp0dJ}+T2UdEPe z&9-dMt9cEtWl#3yO&r7_9KpNog+vGal?!=M098;Eb@2-3;B_pGlqR z*ZC7~(f|#LznxP6uZq)fChFr2yovX)96OQ55-h{=oX@veT%}cB)zn=dMUp8SkJ6eu(*rx)~^w&~B<UdR7Y~ z$&@6sj>Bl(s|WOuCTOyr($kuum-LF}X}*@|ZM~-t^+~Mf-{mUd&Rv*{`S=FkV;xTA zX*`|vbb-d`evQ|3J*Sykq_^~LV1)%&$^ow?g5N+tsyux{tNbLWO~6rbUXoXySrh1>aPmLygnc7Grt1kni#@rYX11(Yd-%FKf28>bERe=S*($Aag4iyFZf^Z-I1o9(QMVMsIg_hH4*o zuHrxp#%;JABXKA0##lU<$w&vfTPYli^KgkfN%t4zWC2!We-7iFyq6E~AwJ4yIg@j^ WgGJOqk7<&o?z88Gop*mQU;hDNNs4d) literal 0 HcmV?d00001 diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-wal b/samples/client/petstore/csharp-refactor/OpenAPIClient/.vs/Org.OpenAPITools/xs/sqlite3/storage.ide-wal new file mode 100644 index 0000000000000000000000000000000000000000..674ccc13ea371167a239fe32eadef98bb4ba62f9 GIT binary patch literal 4136512 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 z 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/Org.OpenAPITools.sln b/samples/client/petstore/csharp-refactor/OpenAPIClient/Org.OpenAPITools.sln new file mode 100644 index 0000000000..5b15451c9d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/Org.OpenAPITools.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +VisualStudioVersion = 12.0.0.0 +MinimumVisualStudioVersion = 10.0.0.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools", "src\Org.OpenAPITools\Org.OpenAPITools.csproj", "{321C8C3F-0156-40C1-AE42-D59761FB9B6C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools.Test", "src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.Build.0 = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/README.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/README.md new file mode 100644 index 0000000000..60dbf319c6 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/README.md @@ -0,0 +1,208 @@ +# Org.OpenAPITools - the C# library for the 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: \" \\ + +This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 1.0.0 +- SDK version: 1.0.0 +- Build package: org.openapitools.codegen.languages.CSharpRefactorClientCodegen + + +## Frameworks supported +- .NET 4.0 or later +- Windows Phone 7.1 (Mango) + + +## Dependencies +- [RestSharp](https://www.nuget.org/packages/RestSharp) - 105.1.0 or later +- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/) - 7.0.0 or later +- [JsonSubTypes](https://www.nuget.org/packages/JsonSubTypes/) - 1.2.0 or later + +The DLLs included in the package may not be the latest version. We recommend using [NuGet](https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: +``` +Install-Package RestSharp +Install-Package Newtonsoft.Json +Install-Package JsonSubTypes +``` + +NOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See [RestSharp#742](https://github.com/restsharp/RestSharp/issues/742) + + +## Installation +Run the following command to generate the DLL +- [Mac/Linux] `/bin/sh build.sh` +- [Windows] `build.bat` + +Then include the DLL (under the `bin` folder) in the C# project, and use the namespaces: +```csharp +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; +``` + +## Packaging + +A `.nuspec` is included with the project. You can follow the Nuget quickstart to [create](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#create-the-package) and [publish](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#publish-the-package) packages. + +This `.nuspec` uses placeholders from the `.csproj`, so build the `.csproj` directly: + +``` +nuget pack -Build -OutputDirectory out Org.OpenAPITools.csproj +``` + +Then, publish to a [local feed](https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds) or [other host](https://docs.microsoft.com/en-us/nuget/hosting-packages/overview) and consume the new package via Nuget as usual. + + +## Getting Started + +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class Example + { + public void main() + { + + var apiInstance = new AnotherFakeApi(); + var modelClient = new ModelClient(); // ModelClient | client model + + try + { + // To test special tags + ModelClient result = apiInstance.Call123TestSpecialTags(modelClient); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling AnotherFakeApi.Call123TestSpecialTags: " + e.Message ); + } + + } + } +} +``` + + +## 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 + + - [Model.AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md) + - [Model.Animal](docs/Animal.md) + - [Model.AnimalFarm](docs/AnimalFarm.md) + - [Model.ApiResponse](docs/ApiResponse.md) + - [Model.ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md) + - [Model.ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md) + - [Model.ArrayTest](docs/ArrayTest.md) + - [Model.Capitalization](docs/Capitalization.md) + - [Model.Cat](docs/Cat.md) + - [Model.Category](docs/Category.md) + - [Model.ClassModel](docs/ClassModel.md) + - [Model.Dog](docs/Dog.md) + - [Model.EnumArrays](docs/EnumArrays.md) + - [Model.EnumClass](docs/EnumClass.md) + - [Model.EnumTest](docs/EnumTest.md) + - [Model.File](docs/File.md) + - [Model.FileSchemaTestClass](docs/FileSchemaTestClass.md) + - [Model.FormatTest](docs/FormatTest.md) + - [Model.HasOnlyReadOnly](docs/HasOnlyReadOnly.md) + - [Model.List](docs/List.md) + - [Model.MapTest](docs/MapTest.md) + - [Model.MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model.Model200Response](docs/Model200Response.md) + - [Model.ModelClient](docs/ModelClient.md) + - [Model.Name](docs/Name.md) + - [Model.NumberOnly](docs/NumberOnly.md) + - [Model.Order](docs/Order.md) + - [Model.OuterComposite](docs/OuterComposite.md) + - [Model.OuterEnum](docs/OuterEnum.md) + - [Model.Pet](docs/Pet.md) + - [Model.ReadOnlyFirst](docs/ReadOnlyFirst.md) + - [Model.Return](docs/Return.md) + - [Model.SpecialModelName](docs/SpecialModelName.md) + - [Model.StringBooleanMap](docs/StringBooleanMap.md) + - [Model.Tag](docs/Tag.md) + - [Model.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 + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/build.bat b/samples/client/petstore/csharp-refactor/OpenAPIClient/build.bat new file mode 100644 index 0000000000..88942a71d0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/build.bat @@ -0,0 +1,17 @@ +:: Generated by: https://github.com/openapitools/openapi-generator.git +:: + +@echo off + +SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319 + +if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '.\nuget.exe')" +.\nuget.exe install src\Org.OpenAPITools\packages.config -o packages + +if not exist ".\bin" mkdir bin + +copy packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll bin\Newtonsoft.Json.dll +copy packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll bin\JsonSubTypes.dll +copy packages\RestSharp.105.1.0\lib\net45\RestSharp.dll bin\RestSharp.dll +%CSCPATH%\csc /reference:bin\Newtonsoft.Json.dll;bin\JsonSubTypes.dll;bin\RestSharp.dll;System.ComponentModel.DataAnnotations.dll /target:library /out:bin\Org.OpenAPITools.dll /recurse:src\Org.OpenAPITools\*.cs /doc:bin\Org.OpenAPITools.xml + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/build.sh b/samples/client/petstore/csharp-refactor/OpenAPIClient/build.sh new file mode 100644 index 0000000000..269c087258 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/build.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# + +frameworkVersion=net45 + +# sdk must match installed framworks under PREFIX/lib/mono/[value] +sdk=4.5.2-api + +# langversion refers to C# language features. see man mcs for details. +langversion=${sdk} +nuget_cmd=nuget + +# Match against our known SDK possibilities +case "${sdk}" in + 4) + langversion=4 + ;; + 4.5*) + langversion=5 + ;; + 4.6*) + langversion=6 + ;; + 4.7*) + langversion=7 # ignoring 7.1 for now. + ;; + *) + langversion=6 + ;; +esac + +echo "[INFO] Target framework: ${frameworkVersion}" + +if ! type nuget &>/dev/null; then + echo "[INFO] Download nuget and packages" + wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe; + nuget_cmd="mono nuget.exe" +fi + +mozroots --import --sync +${nuget_cmd} install src/Org.OpenAPITools/packages.config -o packages; + +echo "[INFO] Copy DLLs to the 'bin' folder" +mkdir -p bin; +cp packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; +cp packages/RestSharp.105.1.0/lib/net45/RestSharp.dll bin/RestSharp.dll; +cp packages/JsonSubTypes.1.2.0/lib/net45/JsonSubTypes.dll bin/JsonSubTypes.dll + +echo "[INFO] Run 'mcs' to build bin/Org.OpenAPITools.dll" +mcs -langversion:${langversion} -sdk:${sdk} -r:bin/Newtonsoft.Json.dll,bin/JsonSubTypes.dll,\ +bin/RestSharp.dll,\ +System.ComponentModel.DataAnnotations.dll,\ +System.Runtime.Serialization.dll \ +-target:library \ +-out:bin/Org.OpenAPITools.dll \ +-recurse:'src/Org.OpenAPITools/*.cs' \ +-doc:bin/Org.OpenAPITools.xml \ +-platform:anycpu + +if [ $? -ne 0 ] +then + echo "[ERROR] Compilation failed with exit code $?" + exit 1 +else + echo "[INFO] bin/Org.OpenAPITools.dll was created successfully" +fi diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AdditionalPropertiesClass.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AdditionalPropertiesClass.md new file mode 100644 index 0000000000..057f5bd65d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AdditionalPropertiesClass.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.AdditionalPropertiesClass +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**MapProperty** | **Dictionary<string, string>** | | [optional] +**MapOfMapProperty** | **Dictionary<string, Dictionary<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/csharp-refactor/OpenAPIClient/docs/Animal.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Animal.md new file mode 100644 index 0000000000..a97ce49b80 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Animal.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/AnimalFarm.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnimalFarm.md new file mode 100644 index 0000000000..69c5172580 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnimalFarm.md @@ -0,0 +1,8 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/AnotherFakeApi.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnotherFakeApi.md new file mode 100644 index 0000000000..81cc3106d6 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/AnotherFakeApi.md @@ -0,0 +1,70 @@ +# Org.OpenAPITools.Api.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** +> ModelClient Call123TestSpecialTags (ModelClient modelClient) + +To test special tags + +To test special tags and operation ID starting with number + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class Call123TestSpecialTagsExample + { + public void main() + { + var apiInstance = new AnotherFakeApi(); + var modelClient = new ModelClient(); // ModelClient | client model + + try + { + // To test special tags + ModelClient result = apiInstance.Call123TestSpecialTags(modelClient); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling AnotherFakeApi.Call123TestSpecialTags: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **modelClient** | [**ModelClient**](ModelClient.md)| client model | + +### Return type + +[**ModelClient**](ModelClient.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/csharp-refactor/OpenAPIClient/docs/ApiResponse.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ApiResponse.md new file mode 100644 index 0000000000..01b35815bd --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ApiResponse.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/ArrayOfArrayOfNumberOnly.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfArrayOfNumberOnly.md new file mode 100644 index 0000000000..614546d325 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfArrayOfNumberOnly.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.ArrayOfArrayOfNumberOnly +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ArrayArrayNumber** | **List<List<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/csharp-refactor/OpenAPIClient/docs/ArrayOfNumberOnly.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfNumberOnly.md new file mode 100644 index 0000000000..1886a6edcb --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayOfNumberOnly.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.ArrayOfNumberOnly +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ArrayNumber** | **List<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/csharp-refactor/OpenAPIClient/docs/ArrayTest.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayTest.md new file mode 100644 index 0000000000..ff6a6cb24b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ArrayTest.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.ArrayTest +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ArrayOfString** | **List<string>** | | [optional] +**ArrayArrayOfInteger** | **List<List<long?>>** | | [optional] +**ArrayArrayOfModel** | **List<List<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/csharp-refactor/OpenAPIClient/docs/Capitalization.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Capitalization.md new file mode 100644 index 0000000000..74c1ab66db --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Capitalization.md @@ -0,0 +1,14 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/Cat.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Cat.md new file mode 100644 index 0000000000..4b79315204 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Cat.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.Cat +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ClassName** | **string** | | +**Color** | **string** | | [optional] [default to "red"] +**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/csharp-refactor/OpenAPIClient/docs/Category.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Category.md new file mode 100644 index 0000000000..67e28fe8d0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Category.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Category +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Id** | **long?** | | [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/csharp-refactor/OpenAPIClient/docs/ClassModel.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ClassModel.md new file mode 100644 index 0000000000..556b05db24 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ClassModel.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/Dog.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Dog.md new file mode 100644 index 0000000000..aa5df1a927 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Dog.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.Dog +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ClassName** | **string** | | +**Color** | **string** | | [optional] [default to "red"] +**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/csharp-refactor/OpenAPIClient/docs/EnumArrays.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumArrays.md new file mode 100644 index 0000000000..2dfe0e2238 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumArrays.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.EnumArrays +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**JustSymbol** | **string** | | [optional] +**ArrayEnum** | **List<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/csharp-refactor/OpenAPIClient/docs/EnumClass.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumClass.md new file mode 100644 index 0000000000..4fb1eae9c0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumClass.md @@ -0,0 +1,8 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/EnumTest.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumTest.md new file mode 100644 index 0000000000..65bc4d2cb0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/EnumTest.md @@ -0,0 +1,13 @@ +# Org.OpenAPITools.Model.EnumTest +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**EnumString** | **string** | | [optional] +**EnumStringRequired** | **string** | | +**EnumInteger** | **int?** | | [optional] +**EnumNumber** | **double?** | | [optional] +**OuterEnum** | **OuterEnum** | | [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/csharp-refactor/OpenAPIClient/docs/FakeApi.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeApi.md new file mode 100644 index 0000000000..f76d88e36d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeApi.md @@ -0,0 +1,791 @@ +# Org.OpenAPITools.Api.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** +> bool? FakeOuterBooleanSerialize (bool? body = null) + + + +Test serialization of outer boolean types + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FakeOuterBooleanSerializeExample + { + public void main() + { + var apiInstance = new FakeApi(); + var body = true; // bool? | Input boolean as post body (optional) + + try + { + bool? result = apiInstance.FakeOuterBooleanSerialize(body); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.FakeOuterBooleanSerialize: " + e.Message ); + } + } + } +} +``` + +### 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** +> OuterComposite FakeOuterCompositeSerialize (OuterComposite outerComposite = null) + + + +Test serialization of object with outer number type + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FakeOuterCompositeSerializeExample + { + public void main() + { + var apiInstance = new FakeApi(); + var outerComposite = new OuterComposite(); // OuterComposite | Input composite as post body (optional) + + try + { + OuterComposite result = apiInstance.FakeOuterCompositeSerialize(outerComposite); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.FakeOuterCompositeSerialize: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **outerComposite** | [**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** +> decimal? FakeOuterNumberSerialize (decimal? body = null) + + + +Test serialization of outer number types + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FakeOuterNumberSerializeExample + { + public void main() + { + var apiInstance = new FakeApi(); + var body = 1.2D; // decimal? | Input number as post body (optional) + + try + { + decimal? result = apiInstance.FakeOuterNumberSerialize(body); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.FakeOuterNumberSerialize: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **decimal?**| Input number as post body | [optional] + +### Return type + +**decimal?** + +### 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** +> string FakeOuterStringSerialize (string body = null) + + + +Test serialization of outer string types + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FakeOuterStringSerializeExample + { + public void main() + { + var apiInstance = new FakeApi(); + var body = body_example; // string | Input string as post body (optional) + + try + { + string result = apiInstance.FakeOuterStringSerialize(body); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.FakeOuterStringSerialize: " + e.Message ); + } + } + } +} +``` + +### 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** +> void TestBodyWithFileSchema (FileSchemaTestClass fileSchemaTestClass) + + + +For this test, the body for this request much reference a schema named `File`. + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestBodyWithFileSchemaExample + { + public void main() + { + var apiInstance = new FakeApi(); + var fileSchemaTestClass = new FileSchemaTestClass(); // FileSchemaTestClass | + + try + { + apiInstance.TestBodyWithFileSchema(fileSchemaTestClass); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestBodyWithFileSchema: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **fileSchemaTestClass** | [**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** +> void TestBodyWithQueryParams (string query, User user) + + + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestBodyWithQueryParamsExample + { + public void main() + { + var apiInstance = new FakeApi(); + var query = query_example; // string | + var user = new User(); // User | + + try + { + apiInstance.TestBodyWithQueryParams(query, user); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestBodyWithQueryParams: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **query** | **string**| | + **user** | [**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** +> ModelClient TestClientModel (ModelClient modelClient) + +To test \"client\" model + +To test \"client\" model + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestClientModelExample + { + public void main() + { + var apiInstance = new FakeApi(); + var modelClient = new ModelClient(); // ModelClient | client model + + try + { + // To test \"client\" model + ModelClient result = apiInstance.TestClientModel(modelClient); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestClientModel: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **modelClient** | [**ModelClient**](ModelClient.md)| client model | + +### Return type + +[**ModelClient**](ModelClient.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** +> 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) + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestEndpointParametersExample + { + public void main() + { + // Configure HTTP basic authorization: http_basic_test + Configuration.Default.Username = "YOUR_USERNAME"; + Configuration.Default.Password = "YOUR_PASSWORD"; + + var apiInstance = new FakeApi(); + var number = 8.14; // decimal? | None + var _double = 1.2D; // double? | None + var patternWithoutDelimiter = patternWithoutDelimiter_example; // string | None + var _byte = BYTE_ARRAY_DATA_HERE; // byte[] | None + var integer = 56; // int? | None (optional) + var int32 = 56; // int? | None (optional) + 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 date = 2013-10-20; // DateTime? | None (optional) + var dateTime = 2013-10-20T19:20:30+01:00; // DateTime? | None (optional) + var password = password_example; // string | None (optional) + var callback = callback_example; // string | None (optional) + + try + { + // Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + apiInstance.TestEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestEndpointParameters: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **number** | **decimal?**| None | + **_double** | **double?**| None | + **patternWithoutDelimiter** | **string**| None | + **_byte** | **byte[]**| None | + **integer** | **int?**| None | [optional] + **int32** | **int?**| None | [optional] + **int64** | **long?**| None | [optional] + **_float** | **float?**| None | [optional] + **_string** | **string**| None | [optional] + **binary** | **System.IO.Stream****System.IO.Stream**| None | [optional] + **date** | **DateTime?**| None | [optional] + **dateTime** | **DateTime?**| 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** +> void TestEnumParameters (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null) + +To test enum parameters + +To test enum parameters + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestEnumParametersExample + { + public void main() + { + var apiInstance = new FakeApi(); + 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) + var enumQueryString = enumQueryString_example; // string | Query parameter enum test (string) (optional) (default to -efg) + var enumQueryInteger = 56; // int? | Query parameter enum test (double) (optional) + var enumQueryDouble = 1.2D; // double? | Query parameter enum test (double) (optional) + var enumFormStringArray = new List(); // List | Form parameter enum test (string array) (optional) (default to $) + var enumFormString = enumFormString_example; // string | Form parameter enum test (string) (optional) (default to -efg) + + try + { + // To test enum parameters + apiInstance.TestEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestEnumParameters: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **enumHeaderStringArray** | **List<string>**| Header parameter enum test (string array) | [optional] + **enumHeaderString** | **string**| Header parameter enum test (string) | [optional] [default to -efg] + **enumQueryStringArray** | **List<string>**| 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** | [**List<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 + +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** +> void TestGroupParameters (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null) + +Fake endpoint to test group parameters (optional) + +Fake endpoint to test group parameters (optional) + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestGroupParametersExample + { + public void main() + { + var apiInstance = new FakeApi(); + 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 + var stringGroup = 56; // int? | String in group parameters (optional) + var booleanGroup = true; // bool? | Boolean in group parameters (optional) + var int64Group = 789; // long? | Integer in group parameters (optional) + + try + { + // Fake endpoint to test group parameters (optional) + apiInstance.TestGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestGroupParameters: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **requiredStringGroup** | **int?**| Required String in group parameters | + **requiredBooleanGroup** | **bool?**| Required Boolean in group parameters | + **requiredInt64Group** | **long?**| Required Integer in group parameters | + **stringGroup** | **int?**| String in group parameters | [optional] + **booleanGroup** | **bool?**| Boolean in group parameters | [optional] + **int64Group** | **long?**| 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** +> void TestInlineAdditionalProperties (Dictionary requestBody) + +test inline additionalProperties + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestInlineAdditionalPropertiesExample + { + public void main() + { + var apiInstance = new FakeApi(); + var requestBody = new Dictionary(); // Dictionary | request body + + try + { + // test inline additionalProperties + apiInstance.TestInlineAdditionalProperties(requestBody); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestInlineAdditionalProperties: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **requestBody** | [**Dictionary<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** +> void TestJsonFormData (string param, string param2) + +test json serialization of form data + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestJsonFormDataExample + { + public void main() + { + var apiInstance = new FakeApi(); + var param = param_example; // string | field1 + var param2 = param2_example; // string | field2 + + try + { + // test json serialization of form data + apiInstance.TestJsonFormData(param, param2); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeApi.TestJsonFormData: " + e.Message ); + } + } + } +} +``` + +### 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/csharp-refactor/OpenAPIClient/docs/FakeClassnameTags123Api.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeClassnameTags123Api.md new file mode 100644 index 0000000000..f069b09839 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FakeClassnameTags123Api.md @@ -0,0 +1,75 @@ +# Org.OpenAPITools.Api.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** +> ModelClient TestClassname (ModelClient modelClient) + +To test class name in snake case + +To test class name in snake case + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestClassnameExample + { + public void main() + { + // Configure API key authorization: api_key_query + Configuration.Default.AddApiKey("api_key_query", "YOUR_API_KEY"); + // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed + // Configuration.Default.AddApiKeyPrefix("api_key_query", "Bearer"); + + var apiInstance = new FakeClassnameTags123Api(); + var modelClient = new ModelClient(); // ModelClient | client model + + try + { + // To test class name in snake case + ModelClient result = apiInstance.TestClassname(modelClient); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling FakeClassnameTags123Api.TestClassname: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **modelClient** | [**ModelClient**](ModelClient.md)| client model | + +### Return type + +[**ModelClient**](ModelClient.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/csharp-refactor/OpenAPIClient/docs/File.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/File.md new file mode 100644 index 0000000000..acf85a4c00 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/File.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/FileSchemaTestClass.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FileSchemaTestClass.md new file mode 100644 index 0000000000..e0820fa4e6 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FileSchemaTestClass.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.FileSchemaTestClass +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**File** | **System.IO.Stream** | | [optional] +**Files** | **List<System.IO.Stream>** | | [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/csharp-refactor/OpenAPIClient/docs/FormatTest.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FormatTest.md new file mode 100644 index 0000000000..f82c08bd75 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/FormatTest.md @@ -0,0 +1,21 @@ +# Org.OpenAPITools.Model.FormatTest +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Integer** | **int?** | | [optional] +**Int32** | **int?** | | [optional] +**Int64** | **long?** | | [optional] +**Number** | **decimal?** | | +**Float** | **float?** | | [optional] +**Double** | **double?** | | [optional] +**String** | **string** | | [optional] +**Byte** | **byte[]** | | +**Binary** | **System.IO.Stream** | | [optional] +**Date** | **DateTime?** | | +**DateTime** | **DateTime?** | | [optional] +**Uuid** | **Guid?** | | [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/csharp-refactor/OpenAPIClient/docs/HasOnlyReadOnly.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/HasOnlyReadOnly.md new file mode 100644 index 0000000000..95f49de194 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/HasOnlyReadOnly.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.HasOnlyReadOnly +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Bar** | **string** | | [optional] +**Foo** | **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/csharp-refactor/OpenAPIClient/docs/List.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/List.md new file mode 100644 index 0000000000..484c2a0992 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/List.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/MapTest.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MapTest.md new file mode 100644 index 0000000000..2c44f95808 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MapTest.md @@ -0,0 +1,12 @@ +# Org.OpenAPITools.Model.MapTest +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**MapMapOfString** | **Dictionary<string, Dictionary<string, string>>** | | [optional] +**MapOfEnumString** | **Dictionary<string, string>** | | [optional] +**DirectMap** | **Dictionary<string, bool?>** | | [optional] +**IndirectMap** | **Dictionary<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/client/petstore/csharp-refactor/OpenAPIClient/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MixedPropertiesAndAdditionalPropertiesClass.md new file mode 100644 index 0000000000..9b8e2e3434 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/MixedPropertiesAndAdditionalPropertiesClass.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.MixedPropertiesAndAdditionalPropertiesClass +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Uuid** | **Guid?** | | [optional] +**DateTime** | **DateTime?** | | [optional] +**Map** | [**Dictionary<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/client/petstore/csharp-refactor/OpenAPIClient/docs/Model200Response.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Model200Response.md new file mode 100644 index 0000000000..16337f9b6b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Model200Response.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/ModelClient.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ModelClient.md new file mode 100644 index 0000000000..ecc7b60ce5 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ModelClient.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.ModelClient +## 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/csharp-refactor/OpenAPIClient/docs/Name.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Name.md new file mode 100644 index 0000000000..e22fef9567 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Name.md @@ -0,0 +1,12 @@ +# Org.OpenAPITools.Model.Name +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_Name** | **int?** | | +**SnakeCase** | **int?** | | [optional] +**Property** | **string** | | [optional] +**_123Number** | **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/csharp-refactor/OpenAPIClient/docs/NumberOnly.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/NumberOnly.md new file mode 100644 index 0000000000..5f00dedf1c --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/NumberOnly.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.NumberOnly +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**JustNumber** | **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/csharp-refactor/OpenAPIClient/docs/Order.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Order.md new file mode 100644 index 0000000000..984bd5ca06 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Order.md @@ -0,0 +1,14 @@ +# Org.OpenAPITools.Model.Order +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Id** | **long?** | | [optional] +**PetId** | **long?** | | [optional] +**Quantity** | **int?** | | [optional] +**ShipDate** | **DateTime?** | | [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/csharp-refactor/OpenAPIClient/docs/OuterComposite.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterComposite.md new file mode 100644 index 0000000000..4091cd23f2 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterComposite.md @@ -0,0 +1,11 @@ +# Org.OpenAPITools.Model.OuterComposite +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**MyNumber** | **decimal?** | | [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/csharp-refactor/OpenAPIClient/docs/OuterEnum.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterEnum.md new file mode 100644 index 0000000000..22713352ca --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/OuterEnum.md @@ -0,0 +1,8 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/Pet.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Pet.md new file mode 100644 index 0000000000..0ac711337a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Pet.md @@ -0,0 +1,14 @@ +# Org.OpenAPITools.Model.Pet +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Id** | **long?** | | [optional] +**Category** | [**Category**](Category.md) | | [optional] +**Name** | **string** | | +**PhotoUrls** | **List<string>** | | +**Tags** | [**List<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/client/petstore/csharp-refactor/OpenAPIClient/docs/PetApi.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/PetApi.md new file mode 100644 index 0000000000..28ba9ebe57 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/PetApi.md @@ -0,0 +1,593 @@ +# Org.OpenAPITools.Api.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** +> void AddPet (Pet pet) + +Add a new pet to the store + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class AddPetExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + var pet = new Pet(); // Pet | Pet object that needs to be added to the store + + try + { + // Add a new pet to the store + apiInstance.AddPet(pet); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.AddPet: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet** | [**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** +> void DeletePet (long? petId, string apiKey = null) + +Deletes a pet + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class DeletePetExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + var petId = 789; // long? | Pet id to delete + var apiKey = apiKey_example; // string | (optional) + + try + { + // Deletes a pet + apiInstance.DeletePet(petId, apiKey); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.DeletePet: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **long?**| 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** +> List FindPetsByStatus (List status) + +Finds Pets by status + +Multiple status values can be provided with comma separated strings + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FindPetsByStatusExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + var status = status_example; // List | Status values that need to be considered for filter + + try + { + // Finds Pets by status + List<Pet> result = apiInstance.FindPetsByStatus(status); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.FindPetsByStatus: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **status** | **List<string>**| Status values that need to be considered for filter | + +### Return type + +[**List**](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** +> List FindPetsByTags (List tags) + +Finds Pets by tags + +Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class FindPetsByTagsExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + var tags = new List(); // List | Tags to filter by + + try + { + // Finds Pets by tags + List<Pet> result = apiInstance.FindPetsByTags(tags); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.FindPetsByTags: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **tags** | [**List<string>**](string.md)| Tags to filter by | + +### Return type + +[**List**](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** +> Pet GetPetById (long? petId) + +Find pet by ID + +Returns a single pet + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class GetPetByIdExample + { + public void main() + { + // Configure API key authorization: api_key + Configuration.Default.AddApiKey("api_key", "YOUR_API_KEY"); + // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed + // Configuration.Default.AddApiKeyPrefix("api_key", "Bearer"); + + var apiInstance = new PetApi(); + var petId = 789; // long? | ID of pet to return + + try + { + // Find pet by ID + Pet result = apiInstance.GetPetById(petId); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.GetPetById: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **long?**| 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** +> void UpdatePet (Pet pet) + +Update an existing pet + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UpdatePetExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + var pet = new Pet(); // Pet | Pet object that needs to be added to the store + + try + { + // Update an existing pet + apiInstance.UpdatePet(pet); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.UpdatePet: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet** | [**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** +> void UpdatePetWithForm (long? petId, string name = null, string status = null) + +Updates a pet in the store with form data + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UpdatePetWithFormExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + 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) + + try + { + // Updates a pet in the store with form data + apiInstance.UpdatePetWithForm(petId, name, status); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.UpdatePetWithForm: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **long?**| 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** +> ApiResponse UploadFile (long? petId, string additionalMetadata = null, System.IO.Stream file = null) + +uploads an image + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFileExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + 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) + + try + { + // uploads an image + ApiResponse result = apiInstance.UploadFile(petId, additionalMetadata, file); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.UploadFile: " + e.Message ); + } + } + } +} +``` + +### Parameters + +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] + +### 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** +> ApiResponse UploadFileWithRequiredFile (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null) + +uploads an image (required) + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UploadFileWithRequiredFileExample + { + public void main() + { + // Configure OAuth2 access token for authorization: petstore_auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new PetApi(); + 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) + + try + { + // uploads an image (required) + ApiResponse result = apiInstance.UploadFileWithRequiredFile(petId, requiredFile, additionalMetadata); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling PetApi.UploadFileWithRequiredFile: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **long?**| ID of pet to update | + **requiredFile** | **System.IO.Stream****System.IO.Stream**| 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/csharp-refactor/OpenAPIClient/docs/ReadOnlyFirst.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ReadOnlyFirst.md new file mode 100644 index 0000000000..6c2571cb48 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/ReadOnlyFirst.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.ReadOnlyFirst +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Bar** | **string** | | [optional] +**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/csharp-refactor/OpenAPIClient/docs/Return.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Return.md new file mode 100644 index 0000000000..21a269c63f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Return.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/SpecialModelName.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/SpecialModelName.md new file mode 100644 index 0000000000..306e65392a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/SpecialModelName.md @@ -0,0 +1,9 @@ +# Org.OpenAPITools.Model.SpecialModelName +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**SpecialPropertyName** | **long?** | | [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/csharp-refactor/OpenAPIClient/docs/StoreApi.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StoreApi.md new file mode 100644 index 0000000000..ff7608854f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StoreApi.md @@ -0,0 +1,254 @@ +# Org.OpenAPITools.Api.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** +> void DeleteOrder (string orderId) + +Delete purchase order by ID + +For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class DeleteOrderExample + { + public void main() + { + var apiInstance = new StoreApi(); + var orderId = orderId_example; // string | ID of the order that needs to be deleted + + try + { + // Delete purchase order by ID + apiInstance.DeleteOrder(orderId); + } + catch (Exception e) + { + Debug.Print("Exception when calling StoreApi.DeleteOrder: " + e.Message ); + } + } + } +} +``` + +### 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** +> Dictionary GetInventory () + +Returns pet inventories by status + +Returns a map of status codes to quantities + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class GetInventoryExample + { + public void main() + { + // Configure API key authorization: api_key + Configuration.Default.AddApiKey("api_key", "YOUR_API_KEY"); + // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed + // Configuration.Default.AddApiKeyPrefix("api_key", "Bearer"); + + var apiInstance = new StoreApi(); + + try + { + // Returns pet inventories by status + Dictionary<string, int?> result = apiInstance.GetInventory(); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling StoreApi.GetInventory: " + e.Message ); + } + } + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +**Dictionary** + +### 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** +> Order GetOrderById (long? orderId) + +Find purchase order by ID + +For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class GetOrderByIdExample + { + public void main() + { + var apiInstance = new StoreApi(); + var orderId = 789; // long? | ID of pet that needs to be fetched + + try + { + // Find purchase order by ID + Order result = apiInstance.GetOrderById(orderId); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling StoreApi.GetOrderById: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **orderId** | **long?**| 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** +> Order PlaceOrder (Order order) + +Place an order for a pet + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class PlaceOrderExample + { + public void main() + { + var apiInstance = new StoreApi(); + var order = new Order(); // Order | order placed for purchasing the pet + + try + { + // Place an order for a pet + Order result = apiInstance.PlaceOrder(order); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling StoreApi.PlaceOrder: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **order** | [**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/csharp-refactor/OpenAPIClient/docs/StringBooleanMap.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StringBooleanMap.md new file mode 100644 index 0000000000..6e7a71368d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/StringBooleanMap.md @@ -0,0 +1,8 @@ +# Org.OpenAPITools.Model.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/csharp-refactor/OpenAPIClient/docs/Tag.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Tag.md new file mode 100644 index 0000000000..6a76c28595 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/Tag.md @@ -0,0 +1,10 @@ +# Org.OpenAPITools.Model.Tag +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Id** | **long?** | | [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/csharp-refactor/OpenAPIClient/docs/User.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/User.md new file mode 100644 index 0000000000..04dd24a342 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/User.md @@ -0,0 +1,16 @@ +# Org.OpenAPITools.Model.User +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Id** | **long?** | | [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/csharp-refactor/OpenAPIClient/docs/UserApi.md b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/UserApi.md new file mode 100644 index 0000000000..857ab27084 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/docs/UserApi.md @@ -0,0 +1,488 @@ +# Org.OpenAPITools.Api.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** +> void CreateUser (User user) + +Create user + +This can only be done by the logged in user. + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class CreateUserExample + { + public void main() + { + var apiInstance = new UserApi(); + var user = new User(); // User | Created user object + + try + { + // Create user + apiInstance.CreateUser(user); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.CreateUser: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user** | [**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** +> void CreateUsersWithArrayInput (List user) + +Creates list of users with given input array + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class CreateUsersWithArrayInputExample + { + public void main() + { + var apiInstance = new UserApi(); + var user = new List(); // List | List of user object + + try + { + // Creates list of users with given input array + apiInstance.CreateUsersWithArrayInput(user); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.CreateUsersWithArrayInput: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user** | [**List<User>**](List.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** +> void CreateUsersWithListInput (List user) + +Creates list of users with given input array + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class CreateUsersWithListInputExample + { + public void main() + { + var apiInstance = new UserApi(); + var user = new List(); // List | List of user object + + try + { + // Creates list of users with given input array + apiInstance.CreateUsersWithListInput(user); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.CreateUsersWithListInput: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user** | [**List<User>**](List.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** +> void DeleteUser (string username) + +Delete user + +This can only be done by the logged in user. + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class DeleteUserExample + { + public void main() + { + var apiInstance = new UserApi(); + var username = username_example; // string | The name that needs to be deleted + + try + { + // Delete user + apiInstance.DeleteUser(username); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.DeleteUser: " + e.Message ); + } + } + } +} +``` + +### 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** +> User GetUserByName (string username) + +Get user by user name + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class GetUserByNameExample + { + public void main() + { + var apiInstance = new UserApi(); + var username = username_example; // string | The name that needs to be fetched. Use user1 for testing. + + try + { + // Get user by user name + User result = apiInstance.GetUserByName(username); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.GetUserByName: " + e.Message ); + } + } + } +} +``` + +### 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** +> string LoginUser (string username, string password) + +Logs user into the system + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class LoginUserExample + { + public void main() + { + var apiInstance = new UserApi(); + var username = username_example; // string | The user name for login + var password = password_example; // string | The password for login in clear text + + try + { + // Logs user into the system + string result = apiInstance.LoginUser(username, password); + Debug.WriteLine(result); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.LoginUser: " + e.Message ); + } + } + } +} +``` + +### 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** +> void LogoutUser () + +Logs out current logged in user session + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class LogoutUserExample + { + public void main() + { + var apiInstance = new UserApi(); + + try + { + // Logs out current logged in user session + apiInstance.LogoutUser(); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.LogoutUser: " + e.Message ); + } + } + } +} +``` + +### 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** +> void UpdateUser (string username, User user) + +Updated user + +This can only be done by the logged in user. + +### Example +```csharp +using System; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class UpdateUserExample + { + public void main() + { + var apiInstance = new UserApi(); + var username = username_example; // string | name that need to be deleted + var user = new User(); // User | Updated user object + + try + { + // Updated user + apiInstance.UpdateUser(username, user); + } + catch (Exception e) + { + Debug.Print("Exception when calling UserApi.UpdateUser: " + e.Message ); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **string**| name that need to be deleted | + **user** | [**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/csharp-refactor/OpenAPIClient/git_push.sh b/samples/client/petstore/csharp-refactor/OpenAPIClient/git_push.sh new file mode 100644 index 0000000000..4d22bfef4d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/git_push.sh @@ -0,0 +1,52 @@ +#!/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-petstore-perl "minor update" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 + +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://github.com/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${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://github.com/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/mono_nunit_test.sh b/samples/client/petstore/csharp-refactor/OpenAPIClient/mono_nunit_test.sh new file mode 100644 index 0000000000..039eba8ed4 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/mono_nunit_test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# +# Generated by: https://github.com/openapitools/openapi-generator.git +# + +wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe +mozroots --import --sync + +echo "[INFO] remove bin/Debug/Org.OpenAPITools.Test.dll" +rm src/Org.OpenAPITools.Test/bin/Debug/Org.OpenAPITools.Test.dll 2> /dev/null + +echo "[INFO] install NUnit runners via NuGet" +wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe +mozroots --import --sync +mono nuget.exe install src/Org.OpenAPITools.Test/packages.config -o packages + +echo "[INFO] Install NUnit runners via NuGet" +mono nuget.exe install NUnit.Runners -Version 2.6.4 -OutputDirectory packages + +echo "[INFO] Build the solution and run the unit test" +xbuild Org.OpenAPITools.sln && \ + mono ./packages/NUnit.Runners.2.6.4/tools/nunit-console.exe src/Org.OpenAPITools.Test/bin/Debug/Org.OpenAPITools.Test.dll diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/AnotherFakeApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/AnotherFakeApiTests.cs new file mode 100644 index 0000000000..e888d01f44 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/AnotherFakeApiTests.cs @@ -0,0 +1,81 @@ +/* + * 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 System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + ///

+ /// Class for testing AnotherFakeApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class AnotherFakeApiTests + { + private AnotherFakeApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new AnotherFakeApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of AnotherFakeApi + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' AnotherFakeApi + //Assert.IsInstanceOfType(typeof(AnotherFakeApi), instance, "instance is a AnotherFakeApi"); + } + + + /// + /// Test Call123TestSpecialTags + /// + [Test] + public void Call123TestSpecialTagsTest() + { + // TODO uncomment below to test the method and replace null with proper value + //ModelClient modelClient = null; + //var response = instance.Call123TestSpecialTags(modelClient); + //Assert.IsInstanceOf (response, "response is ModelClient"); + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeApiTests.cs new file mode 100644 index 0000000000..79feb5e5d8 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeApiTests.cs @@ -0,0 +1,223 @@ +/* + * 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 System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing FakeApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class FakeApiTests + { + private FakeApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new FakeApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of FakeApi + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' FakeApi + //Assert.IsInstanceOfType(typeof(FakeApi), instance, "instance is a FakeApi"); + } + + + /// + /// Test FakeOuterBooleanSerialize + /// + [Test] + public void FakeOuterBooleanSerializeTest() + { + // TODO uncomment below to test the method and replace null with proper value + //bool? body = null; + //var response = instance.FakeOuterBooleanSerialize(body); + //Assert.IsInstanceOf (response, "response is bool?"); + } + + /// + /// Test FakeOuterCompositeSerialize + /// + [Test] + public void FakeOuterCompositeSerializeTest() + { + // TODO uncomment below to test the method and replace null with proper value + //OuterComposite outerComposite = null; + //var response = instance.FakeOuterCompositeSerialize(outerComposite); + //Assert.IsInstanceOf (response, "response is OuterComposite"); + } + + /// + /// Test FakeOuterNumberSerialize + /// + [Test] + public void FakeOuterNumberSerializeTest() + { + // TODO uncomment below to test the method and replace null with proper value + //decimal? body = null; + //var response = instance.FakeOuterNumberSerialize(body); + //Assert.IsInstanceOf (response, "response is decimal?"); + } + + /// + /// Test FakeOuterStringSerialize + /// + [Test] + public void FakeOuterStringSerializeTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string body = null; + //var response = instance.FakeOuterStringSerialize(body); + //Assert.IsInstanceOf (response, "response is string"); + } + + /// + /// Test TestBodyWithFileSchema + /// + [Test] + public void TestBodyWithFileSchemaTest() + { + // TODO uncomment below to test the method and replace null with proper value + //FileSchemaTestClass fileSchemaTestClass = null; + //instance.TestBodyWithFileSchema(fileSchemaTestClass); + + } + + /// + /// Test TestBodyWithQueryParams + /// + [Test] + public void TestBodyWithQueryParamsTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string query = null; + //User user = null; + //instance.TestBodyWithQueryParams(query, user); + + } + + /// + /// Test TestClientModel + /// + [Test] + public void TestClientModelTest() + { + // TODO uncomment below to test the method and replace null with proper value + //ModelClient modelClient = null; + //var response = instance.TestClientModel(modelClient); + //Assert.IsInstanceOf (response, "response is ModelClient"); + } + + /// + /// Test TestEndpointParameters + /// + [Test] + public void TestEndpointParametersTest() + { + // TODO uncomment below to test the method and replace null with proper value + //decimal? number = null; + //double? _double = null; + //string patternWithoutDelimiter = null; + //byte[] _byte = null; + //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; + //instance.TestEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback); + + } + + /// + /// Test TestEnumParameters + /// + [Test] + public void TestEnumParametersTest() + { + // TODO uncomment below to test the method and replace null with proper value + //List enumHeaderStringArray = null; + //string enumHeaderString = null; + //List enumQueryStringArray = null; + //string enumQueryString = null; + //int? enumQueryInteger = null; + //double? enumQueryDouble = null; + //List enumFormStringArray = null; + //string enumFormString = null; + //instance.TestEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); + + } + + /// + /// Test TestInlineAdditionalProperties + /// + [Test] + public void TestInlineAdditionalPropertiesTest() + { + // TODO uncomment below to test the method and replace null with proper value + //Dictionary requestBody = null; + //instance.TestInlineAdditionalProperties(requestBody); + + } + + /// + /// Test TestJsonFormData + /// + [Test] + public void TestJsonFormDataTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string param = null; + //string param2 = null; + //instance.TestJsonFormData(param, param2); + + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeClassnameTags123ApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeClassnameTags123ApiTests.cs new file mode 100644 index 0000000000..57afc7f80a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/FakeClassnameTags123ApiTests.cs @@ -0,0 +1,81 @@ +/* + * 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 System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing FakeClassnameTags123Api + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class FakeClassnameTags123ApiTests + { + private FakeClassnameTags123Api instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new FakeClassnameTags123Api(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of FakeClassnameTags123Api + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' FakeClassnameTags123Api + //Assert.IsInstanceOfType(typeof(FakeClassnameTags123Api), instance, "instance is a FakeClassnameTags123Api"); + } + + + /// + /// Test TestClassname + /// + [Test] + public void TestClassnameTest() + { + // TODO uncomment below to test the method and replace null with proper value + //ModelClient modelClient = null; + //var response = instance.TestClassname(modelClient); + //Assert.IsInstanceOf (response, "response is ModelClient"); + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs new file mode 100644 index 0000000000..1b78d0a12f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + /// + /// 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. + /// + [TestFixture] + public class PetApiTests + { + private PetApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new PetApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of PetApi + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' PetApi + //Assert.IsInstanceOfType(typeof(PetApi), instance, "instance is a PetApi"); + } + + + /// + /// Test AddPet + /// + [Test] + public void AddPetTest() + { + // TODO uncomment below to test the method and replace null with proper value + //Pet pet = null; + //instance.AddPet(pet); + + } + + /// + /// Test DeletePet + /// + [Test] + public void DeletePetTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? petId = null; + //string apiKey = null; + //instance.DeletePet(petId, apiKey); + + } + + /// + /// Test FindPetsByStatus + /// + [Test] + public void FindPetsByStatusTest() + { + // TODO uncomment below to test the method and replace null with proper value + //List status = null; + //var response = instance.FindPetsByStatus(status); + //Assert.IsInstanceOf> (response, "response is List"); + } + + /// + /// Test FindPetsByTags + /// + [Test] + public void FindPetsByTagsTest() + { + // TODO uncomment below to test the method and replace null with proper value + //List tags = null; + //var response = instance.FindPetsByTags(tags); + //Assert.IsInstanceOf> (response, "response is List"); + } + + /// + /// Test GetPetById + /// + [Test] + public void GetPetByIdTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? petId = null; + //var response = instance.GetPetById(petId); + //Assert.IsInstanceOf (response, "response is Pet"); + } + + /// + /// Test UpdatePet + /// + [Test] + public void UpdatePetTest() + { + // TODO uncomment below to test the method and replace null with proper value + //Pet pet = null; + //instance.UpdatePet(pet); + + } + + /// + /// Test UpdatePetWithForm + /// + [Test] + public void UpdatePetWithFormTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? petId = null; + //string name = null; + //string status = null; + //instance.UpdatePetWithForm(petId, name, status); + + } + + /// + /// Test UploadFile + /// + [Test] + public void UploadFileTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? petId = null; + //string additionalMetadata = null; + //System.IO.Stream file = null; + //var response = instance.UploadFile(petId, additionalMetadata, file); + //Assert.IsInstanceOf (response, "response is ApiResponse"); + } + + /// + /// Test UploadFileWithRequiredFile + /// + [Test] + public void UploadFileWithRequiredFileTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? petId = null; + //System.IO.Stream requiredFile = null; + //string additionalMetadata = null; + //var response = instance.UploadFileWithRequiredFile(petId, requiredFile, additionalMetadata); + //Assert.IsInstanceOf (response, "response is ApiResponse"); + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/StoreApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/StoreApiTests.cs new file mode 100644 index 0000000000..20a28424ae --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/StoreApiTests.cs @@ -0,0 +1,116 @@ +/* + * 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 System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing StoreApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class StoreApiTests + { + private StoreApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new StoreApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of StoreApi + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' StoreApi + //Assert.IsInstanceOfType(typeof(StoreApi), instance, "instance is a StoreApi"); + } + + + /// + /// Test DeleteOrder + /// + [Test] + public void DeleteOrderTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string orderId = null; + //instance.DeleteOrder(orderId); + + } + + /// + /// Test GetInventory + /// + [Test] + public void GetInventoryTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.GetInventory(); + //Assert.IsInstanceOf> (response, "response is Dictionary"); + } + + /// + /// Test GetOrderById + /// + [Test] + public void GetOrderByIdTest() + { + // TODO uncomment below to test the method and replace null with proper value + //long? orderId = null; + //var response = instance.GetOrderById(orderId); + //Assert.IsInstanceOf (response, "response is Order"); + } + + /// + /// Test PlaceOrder + /// + [Test] + public void PlaceOrderTest() + { + // TODO uncomment below to test the method and replace null with proper value + //Order order = null; + //var response = instance.PlaceOrder(order); + //Assert.IsInstanceOf (response, "response is Order"); + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/UserApiTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/UserApiTests.cs new file mode 100644 index 0000000000..6abe2c9b54 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Api/UserApiTests.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using NUnit.Framework; + +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing UserApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + [TestFixture] + public class UserApiTests + { + private UserApi instance; + + /// + /// Setup before each unit test + /// + [SetUp] + public void Init() + { + instance = new UserApi(); + } + + /// + /// Clean up after each unit test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of UserApi + /// + [Test] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' UserApi + //Assert.IsInstanceOfType(typeof(UserApi), instance, "instance is a UserApi"); + } + + + /// + /// Test CreateUser + /// + [Test] + public void CreateUserTest() + { + // TODO uncomment below to test the method and replace null with proper value + //User user = null; + //instance.CreateUser(user); + + } + + /// + /// Test CreateUsersWithArrayInput + /// + [Test] + public void CreateUsersWithArrayInputTest() + { + // TODO uncomment below to test the method and replace null with proper value + //List user = null; + //instance.CreateUsersWithArrayInput(user); + + } + + /// + /// Test CreateUsersWithListInput + /// + [Test] + public void CreateUsersWithListInputTest() + { + // TODO uncomment below to test the method and replace null with proper value + //List user = null; + //instance.CreateUsersWithListInput(user); + + } + + /// + /// Test DeleteUser + /// + [Test] + public void DeleteUserTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string username = null; + //instance.DeleteUser(username); + + } + + /// + /// Test GetUserByName + /// + [Test] + public void GetUserByNameTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string username = null; + //var response = instance.GetUserByName(username); + //Assert.IsInstanceOf (response, "response is User"); + } + + /// + /// Test LoginUser + /// + [Test] + public void LoginUserTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string username = null; + //string password = null; + //var response = instance.LoginUser(username, password); + //Assert.IsInstanceOf (response, "response is string"); + } + + /// + /// Test LogoutUser + /// + [Test] + public void LogoutUserTest() + { + // TODO uncomment below to test the method and replace null with proper value + //instance.LogoutUser(); + + } + + /// + /// Test UpdateUser + /// + [Test] + public void UpdateUserTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string username = null; + //User user = null; + //instance.UpdateUser(username, user); + + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AdditionalPropertiesClassTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AdditionalPropertiesClassTests.cs new file mode 100644 index 0000000000..e4435f13ab --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AdditionalPropertiesClassTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing AdditionalPropertiesClass + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class AdditionalPropertiesClassTests + { + // TODO uncomment below to declare an instance variable for AdditionalPropertiesClass + //private AdditionalPropertiesClass instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of AdditionalPropertiesClass + //instance = new AdditionalPropertiesClass(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of AdditionalPropertiesClass + /// + [Test] + public void AdditionalPropertiesClassInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" AdditionalPropertiesClass + //Assert.IsInstanceOfType (instance, "variable 'instance' is a AdditionalPropertiesClass"); + } + + + /// + /// Test the property 'MapProperty' + /// + [Test] + public void MapPropertyTest() + { + // TODO unit test for the property 'MapProperty' + } + /// + /// Test the property 'MapOfMapProperty' + /// + [Test] + public void MapOfMapPropertyTest() + { + // TODO unit test for the property 'MapOfMapProperty' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalFarmTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalFarmTests.cs new file mode 100644 index 0000000000..cf61e42343 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalFarmTests.cs @@ -0,0 +1,72 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing AnimalFarm + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class AnimalFarmTests + { + // TODO uncomment below to declare an instance variable for AnimalFarm + //private AnimalFarm instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of AnimalFarm + //instance = new AnimalFarm(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of AnimalFarm + /// + [Test] + public void AnimalFarmInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" AnimalFarm + //Assert.IsInstanceOfType (instance, "variable 'instance' is a AnimalFarm"); + } + + + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalTests.cs new file mode 100644 index 0000000000..2849d780c8 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/AnimalTests.cs @@ -0,0 +1,106 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Animal + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class AnimalTests + { + // TODO uncomment below to declare an instance variable for Animal + //private Animal instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Animal + //instance = new Animal(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Animal + /// + [Test] + public void AnimalInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Animal + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Animal"); + } + + /// + /// Test deserialize a Dog from type Animal + /// + [Test] + public void DogDeserializeFromAnimalTest() + { + // TODO uncomment below to test deserialize a Dog from type Animal + //Assert.IsInstanceOf(JsonConvert.DeserializeObject(new Dog().ToJson())); + } + /// + /// Test deserialize a Cat from type Animal + /// + [Test] + public void CatDeserializeFromAnimalTest() + { + // TODO uncomment below to test deserialize a Cat from type Animal + //Assert.IsInstanceOf(JsonConvert.DeserializeObject(new Cat().ToJson())); + } + + /// + /// Test the property 'ClassName' + /// + [Test] + public void ClassNameTest() + { + // TODO unit test for the property 'ClassName' + } + /// + /// Test the property 'Color' + /// + [Test] + public void ColorTest() + { + // TODO unit test for the property 'Color' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ApiResponseTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ApiResponseTests.cs new file mode 100644 index 0000000000..70c0757514 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ApiResponseTests.cs @@ -0,0 +1,96 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ApiResponse + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ApiResponseTests + { + // TODO uncomment below to declare an instance variable for ApiResponse + //private ApiResponse instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ApiResponse + //instance = new ApiResponse(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ApiResponse + /// + [Test] + public void ApiResponseInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ApiResponse + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ApiResponse"); + } + + + /// + /// Test the property 'Code' + /// + [Test] + public void CodeTest() + { + // TODO unit test for the property 'Code' + } + /// + /// Test the property 'Type' + /// + [Test] + public void TypeTest() + { + // TODO unit test for the property 'Type' + } + /// + /// Test the property 'Message' + /// + [Test] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfArrayOfNumberOnlyTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfArrayOfNumberOnlyTests.cs new file mode 100644 index 0000000000..5eb86a3857 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfArrayOfNumberOnlyTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ArrayOfArrayOfNumberOnly + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ArrayOfArrayOfNumberOnlyTests + { + // TODO uncomment below to declare an instance variable for ArrayOfArrayOfNumberOnly + //private ArrayOfArrayOfNumberOnly instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ArrayOfArrayOfNumberOnly + //instance = new ArrayOfArrayOfNumberOnly(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ArrayOfArrayOfNumberOnly + /// + [Test] + public void ArrayOfArrayOfNumberOnlyInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ArrayOfArrayOfNumberOnly + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ArrayOfArrayOfNumberOnly"); + } + + + /// + /// Test the property 'ArrayArrayNumber' + /// + [Test] + public void ArrayArrayNumberTest() + { + // TODO unit test for the property 'ArrayArrayNumber' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfNumberOnlyTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfNumberOnlyTests.cs new file mode 100644 index 0000000000..cd7074afaa --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayOfNumberOnlyTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ArrayOfNumberOnly + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ArrayOfNumberOnlyTests + { + // TODO uncomment below to declare an instance variable for ArrayOfNumberOnly + //private ArrayOfNumberOnly instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ArrayOfNumberOnly + //instance = new ArrayOfNumberOnly(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ArrayOfNumberOnly + /// + [Test] + public void ArrayOfNumberOnlyInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ArrayOfNumberOnly + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ArrayOfNumberOnly"); + } + + + /// + /// Test the property 'ArrayNumber' + /// + [Test] + public void ArrayNumberTest() + { + // TODO unit test for the property 'ArrayNumber' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayTestTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayTestTests.cs new file mode 100644 index 0000000000..f1f286ce44 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ArrayTestTests.cs @@ -0,0 +1,96 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ArrayTest + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ArrayTestTests + { + // TODO uncomment below to declare an instance variable for ArrayTest + //private ArrayTest instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ArrayTest + //instance = new ArrayTest(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ArrayTest + /// + [Test] + public void ArrayTestInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ArrayTest + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ArrayTest"); + } + + + /// + /// Test the property 'ArrayOfString' + /// + [Test] + public void ArrayOfStringTest() + { + // TODO unit test for the property 'ArrayOfString' + } + /// + /// Test the property 'ArrayArrayOfInteger' + /// + [Test] + public void ArrayArrayOfIntegerTest() + { + // TODO unit test for the property 'ArrayArrayOfInteger' + } + /// + /// Test the property 'ArrayArrayOfModel' + /// + [Test] + public void ArrayArrayOfModelTest() + { + // TODO unit test for the property 'ArrayArrayOfModel' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CapitalizationTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CapitalizationTests.cs new file mode 100644 index 0000000000..cb003b2abe --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CapitalizationTests.cs @@ -0,0 +1,120 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Capitalization + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class CapitalizationTests + { + // TODO uncomment below to declare an instance variable for Capitalization + //private Capitalization instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Capitalization + //instance = new Capitalization(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Capitalization + /// + [Test] + public void CapitalizationInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Capitalization + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Capitalization"); + } + + + /// + /// Test the property 'SmallCamel' + /// + [Test] + public void SmallCamelTest() + { + // TODO unit test for the property 'SmallCamel' + } + /// + /// Test the property 'CapitalCamel' + /// + [Test] + public void CapitalCamelTest() + { + // TODO unit test for the property 'CapitalCamel' + } + /// + /// Test the property 'SmallSnake' + /// + [Test] + public void SmallSnakeTest() + { + // TODO unit test for the property 'SmallSnake' + } + /// + /// Test the property 'CapitalSnake' + /// + [Test] + public void CapitalSnakeTest() + { + // TODO unit test for the property 'CapitalSnake' + } + /// + /// Test the property 'SCAETHFlowPoints' + /// + [Test] + public void SCAETHFlowPointsTest() + { + // TODO unit test for the property 'SCAETHFlowPoints' + } + /// + /// Test the property 'ATT_NAME' + /// + [Test] + public void ATT_NAMETest() + { + // TODO unit test for the property 'ATT_NAME' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CatTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CatTests.cs new file mode 100644 index 0000000000..6cd18d546e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CatTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Cat + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class CatTests + { + // TODO uncomment below to declare an instance variable for Cat + //private Cat instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Cat + //instance = new Cat(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Cat + /// + [Test] + public void CatInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Cat + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Cat"); + } + + + /// + /// Test the property 'Declawed' + /// + [Test] + public void DeclawedTest() + { + // TODO unit test for the property 'Declawed' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CategoryTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CategoryTests.cs new file mode 100644 index 0000000000..f964723517 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/CategoryTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Category + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class CategoryTests + { + // TODO uncomment below to declare an instance variable for Category + //private Category instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Category + //instance = new Category(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Category + /// + [Test] + public void CategoryInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Category + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Category"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO unit test for the property 'Id' + } + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO unit test for the property 'Name' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ClassModelTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ClassModelTests.cs new file mode 100644 index 0000000000..0a6de083da --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ClassModelTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ClassModel + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ClassModelTests + { + // TODO uncomment below to declare an instance variable for ClassModel + //private ClassModel instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ClassModel + //instance = new ClassModel(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ClassModel + /// + [Test] + public void ClassModelInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ClassModel + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ClassModel"); + } + + + /// + /// Test the property 'Class' + /// + [Test] + public void ClassTest() + { + // TODO unit test for the property 'Class' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/DogTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/DogTests.cs new file mode 100644 index 0000000000..fbae571470 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/DogTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Dog + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class DogTests + { + // TODO uncomment below to declare an instance variable for Dog + //private Dog instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Dog + //instance = new Dog(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Dog + /// + [Test] + public void DogInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Dog + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Dog"); + } + + + /// + /// Test the property 'Breed' + /// + [Test] + public void BreedTest() + { + // TODO unit test for the property 'Breed' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumArraysTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumArraysTests.cs new file mode 100644 index 0000000000..1760e0d4ef --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumArraysTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing EnumArrays + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class EnumArraysTests + { + // TODO uncomment below to declare an instance variable for EnumArrays + //private EnumArrays instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of EnumArrays + //instance = new EnumArrays(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of EnumArrays + /// + [Test] + public void EnumArraysInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" EnumArrays + //Assert.IsInstanceOfType (instance, "variable 'instance' is a EnumArrays"); + } + + + /// + /// Test the property 'JustSymbol' + /// + [Test] + public void JustSymbolTest() + { + // TODO unit test for the property 'JustSymbol' + } + /// + /// Test the property 'ArrayEnum' + /// + [Test] + public void ArrayEnumTest() + { + // TODO unit test for the property 'ArrayEnum' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumClassTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumClassTests.cs new file mode 100644 index 0000000000..f1c67fe191 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumClassTests.cs @@ -0,0 +1,72 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing EnumClass + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class EnumClassTests + { + // TODO uncomment below to declare an instance variable for EnumClass + //private EnumClass instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of EnumClass + //instance = new EnumClass(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of EnumClass + /// + [Test] + public void EnumClassInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" EnumClass + //Assert.IsInstanceOfType (instance, "variable 'instance' is a EnumClass"); + } + + + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumTestTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumTestTests.cs new file mode 100644 index 0000000000..6ba0c31db4 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/EnumTestTests.cs @@ -0,0 +1,112 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing EnumTest + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class EnumTestTests + { + // TODO uncomment below to declare an instance variable for EnumTest + //private EnumTest instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of EnumTest + //instance = new EnumTest(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of EnumTest + /// + [Test] + public void EnumTestInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" EnumTest + //Assert.IsInstanceOfType (instance, "variable 'instance' is a EnumTest"); + } + + + /// + /// Test the property 'EnumString' + /// + [Test] + public void EnumStringTest() + { + // TODO unit test for the property 'EnumString' + } + /// + /// Test the property 'EnumStringRequired' + /// + [Test] + public void EnumStringRequiredTest() + { + // TODO unit test for the property 'EnumStringRequired' + } + /// + /// Test the property 'EnumInteger' + /// + [Test] + public void EnumIntegerTest() + { + // TODO unit test for the property 'EnumInteger' + } + /// + /// Test the property 'EnumNumber' + /// + [Test] + public void EnumNumberTest() + { + // TODO unit test for the property 'EnumNumber' + } + /// + /// Test the property 'OuterEnum' + /// + [Test] + public void OuterEnumTest() + { + // TODO unit test for the property 'OuterEnum' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileSchemaTestClassTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileSchemaTestClassTests.cs new file mode 100644 index 0000000000..bb47c43dc7 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileSchemaTestClassTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing FileSchemaTestClass + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class FileSchemaTestClassTests + { + // TODO uncomment below to declare an instance variable for FileSchemaTestClass + //private FileSchemaTestClass instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of FileSchemaTestClass + //instance = new FileSchemaTestClass(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of FileSchemaTestClass + /// + [Test] + public void FileSchemaTestClassInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" FileSchemaTestClass + //Assert.IsInstanceOfType (instance, "variable 'instance' is a FileSchemaTestClass"); + } + + + /// + /// Test the property 'File' + /// + [Test] + public void FileTest() + { + // TODO unit test for the property 'File' + } + /// + /// Test the property 'Files' + /// + [Test] + public void FilesTest() + { + // TODO unit test for the property 'Files' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileTests.cs new file mode 100644 index 0000000000..f1cf54c22e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FileTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing File + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class FileTests + { + // TODO uncomment below to declare an instance variable for File + //private File instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of File + //instance = new File(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of File + /// + [Test] + public void FileInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" File + //Assert.IsInstanceOfType (instance, "variable 'instance' is a File"); + } + + + /// + /// Test the property 'SourceURI' + /// + [Test] + public void SourceURITest() + { + // TODO unit test for the property 'SourceURI' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FormatTestTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FormatTestTests.cs new file mode 100644 index 0000000000..cca85ec5b2 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/FormatTestTests.cs @@ -0,0 +1,176 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing FormatTest + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class FormatTestTests + { + // TODO uncomment below to declare an instance variable for FormatTest + //private FormatTest instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of FormatTest + //instance = new FormatTest(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of FormatTest + /// + [Test] + public void FormatTestInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" FormatTest + //Assert.IsInstanceOfType (instance, "variable 'instance' is a FormatTest"); + } + + + /// + /// Test the property 'Integer' + /// + [Test] + public void IntegerTest() + { + // TODO unit test for the property 'Integer' + } + /// + /// Test the property 'Int32' + /// + [Test] + public void Int32Test() + { + // TODO unit test for the property 'Int32' + } + /// + /// Test the property 'Int64' + /// + [Test] + public void Int64Test() + { + // TODO unit test for the property 'Int64' + } + /// + /// Test the property 'Number' + /// + [Test] + public void NumberTest() + { + // TODO unit test for the property 'Number' + } + /// + /// Test the property 'Float' + /// + [Test] + public void FloatTest() + { + // TODO unit test for the property 'Float' + } + /// + /// Test the property 'Double' + /// + [Test] + public void DoubleTest() + { + // TODO unit test for the property 'Double' + } + /// + /// Test the property 'String' + /// + [Test] + public void StringTest() + { + // TODO unit test for the property 'String' + } + /// + /// Test the property 'Byte' + /// + [Test] + public void ByteTest() + { + // TODO unit test for the property 'Byte' + } + /// + /// Test the property 'Binary' + /// + [Test] + public void BinaryTest() + { + // TODO unit test for the property 'Binary' + } + /// + /// Test the property 'Date' + /// + [Test] + public void DateTest() + { + // TODO unit test for the property 'Date' + } + /// + /// Test the property 'DateTime' + /// + [Test] + public void DateTimeTest() + { + // TODO unit test for the property 'DateTime' + } + /// + /// Test the property 'Uuid' + /// + [Test] + public void UuidTest() + { + // TODO unit test for the property 'Uuid' + } + /// + /// Test the property 'Password' + /// + [Test] + public void PasswordTest() + { + // TODO unit test for the property 'Password' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/HasOnlyReadOnlyTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/HasOnlyReadOnlyTests.cs new file mode 100644 index 0000000000..1fef4b1371 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/HasOnlyReadOnlyTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing HasOnlyReadOnly + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class HasOnlyReadOnlyTests + { + // TODO uncomment below to declare an instance variable for HasOnlyReadOnly + //private HasOnlyReadOnly instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of HasOnlyReadOnly + //instance = new HasOnlyReadOnly(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of HasOnlyReadOnly + /// + [Test] + public void HasOnlyReadOnlyInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" HasOnlyReadOnly + //Assert.IsInstanceOfType (instance, "variable 'instance' is a HasOnlyReadOnly"); + } + + + /// + /// Test the property 'Bar' + /// + [Test] + public void BarTest() + { + // TODO unit test for the property 'Bar' + } + /// + /// Test the property 'Foo' + /// + [Test] + public void FooTest() + { + // TODO unit test for the property 'Foo' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ListTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ListTests.cs new file mode 100644 index 0000000000..983fd757c3 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ListTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing List + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ListTests + { + // TODO uncomment below to declare an instance variable for List + //private List instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of List + //instance = new List(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of List + /// + [Test] + public void ListInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" List + //Assert.IsInstanceOfType (instance, "variable 'instance' is a List"); + } + + + /// + /// Test the property '_123List' + /// + [Test] + public void _123ListTest() + { + // TODO unit test for the property '_123List' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MapTestTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MapTestTests.cs new file mode 100644 index 0000000000..9bb76bde23 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MapTestTests.cs @@ -0,0 +1,104 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing MapTest + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class MapTestTests + { + // TODO uncomment below to declare an instance variable for MapTest + //private MapTest instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of MapTest + //instance = new MapTest(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of MapTest + /// + [Test] + public void MapTestInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" MapTest + //Assert.IsInstanceOfType (instance, "variable 'instance' is a MapTest"); + } + + + /// + /// Test the property 'MapMapOfString' + /// + [Test] + public void MapMapOfStringTest() + { + // TODO unit test for the property 'MapMapOfString' + } + /// + /// Test the property 'MapOfEnumString' + /// + [Test] + public void MapOfEnumStringTest() + { + // TODO unit test for the property 'MapOfEnumString' + } + /// + /// Test the property 'DirectMap' + /// + [Test] + public void DirectMapTest() + { + // TODO unit test for the property 'DirectMap' + } + /// + /// Test the property 'IndirectMap' + /// + [Test] + public void IndirectMapTest() + { + // TODO unit test for the property 'IndirectMap' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MixedPropertiesAndAdditionalPropertiesClassTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MixedPropertiesAndAdditionalPropertiesClassTests.cs new file mode 100644 index 0000000000..72e5a9130b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/MixedPropertiesAndAdditionalPropertiesClassTests.cs @@ -0,0 +1,96 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing MixedPropertiesAndAdditionalPropertiesClass + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class MixedPropertiesAndAdditionalPropertiesClassTests + { + // TODO uncomment below to declare an instance variable for MixedPropertiesAndAdditionalPropertiesClass + //private MixedPropertiesAndAdditionalPropertiesClass instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of MixedPropertiesAndAdditionalPropertiesClass + //instance = new MixedPropertiesAndAdditionalPropertiesClass(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of MixedPropertiesAndAdditionalPropertiesClass + /// + [Test] + public void MixedPropertiesAndAdditionalPropertiesClassInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" MixedPropertiesAndAdditionalPropertiesClass + //Assert.IsInstanceOfType (instance, "variable 'instance' is a MixedPropertiesAndAdditionalPropertiesClass"); + } + + + /// + /// Test the property 'Uuid' + /// + [Test] + public void UuidTest() + { + // TODO unit test for the property 'Uuid' + } + /// + /// Test the property 'DateTime' + /// + [Test] + public void DateTimeTest() + { + // TODO unit test for the property 'DateTime' + } + /// + /// Test the property 'Map' + /// + [Test] + public void MapTest() + { + // TODO unit test for the property 'Map' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/Model200ResponseTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/Model200ResponseTests.cs new file mode 100644 index 0000000000..f85a9a6a58 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/Model200ResponseTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Model200Response + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class Model200ResponseTests + { + // TODO uncomment below to declare an instance variable for Model200Response + //private Model200Response instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Model200Response + //instance = new Model200Response(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Model200Response + /// + [Test] + public void Model200ResponseInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Model200Response + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Model200Response"); + } + + + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO unit test for the property 'Name' + } + /// + /// Test the property 'Class' + /// + [Test] + public void ClassTest() + { + // TODO unit test for the property 'Class' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ModelClientTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ModelClientTests.cs new file mode 100644 index 0000000000..db4530153a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ModelClientTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ModelClient + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ModelClientTests + { + // TODO uncomment below to declare an instance variable for ModelClient + //private ModelClient instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ModelClient + //instance = new ModelClient(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ModelClient + /// + [Test] + public void ModelClientInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ModelClient + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ModelClient"); + } + + + /// + /// Test the property '__Client' + /// + [Test] + public void __ClientTest() + { + // TODO unit test for the property '__Client' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NameTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NameTests.cs new file mode 100644 index 0000000000..5575f11af5 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NameTests.cs @@ -0,0 +1,104 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Name + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class NameTests + { + // TODO uncomment below to declare an instance variable for Name + //private Name instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Name + //instance = new Name(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Name + /// + [Test] + public void NameInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Name + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Name"); + } + + + /// + /// Test the property '_Name' + /// + [Test] + public void _NameTest() + { + // TODO unit test for the property '_Name' + } + /// + /// Test the property 'SnakeCase' + /// + [Test] + public void SnakeCaseTest() + { + // TODO unit test for the property 'SnakeCase' + } + /// + /// Test the property 'Property' + /// + [Test] + public void PropertyTest() + { + // TODO unit test for the property 'Property' + } + /// + /// Test the property '_123Number' + /// + [Test] + public void _123NumberTest() + { + // TODO unit test for the property '_123Number' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NumberOnlyTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NumberOnlyTests.cs new file mode 100644 index 0000000000..d9b5c4ea49 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/NumberOnlyTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing NumberOnly + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class NumberOnlyTests + { + // TODO uncomment below to declare an instance variable for NumberOnly + //private NumberOnly instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of NumberOnly + //instance = new NumberOnly(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of NumberOnly + /// + [Test] + public void NumberOnlyInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" NumberOnly + //Assert.IsInstanceOfType (instance, "variable 'instance' is a NumberOnly"); + } + + + /// + /// Test the property 'JustNumber' + /// + [Test] + public void JustNumberTest() + { + // TODO unit test for the property 'JustNumber' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OrderTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OrderTests.cs new file mode 100644 index 0000000000..36853bd0d1 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OrderTests.cs @@ -0,0 +1,120 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Order + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class OrderTests + { + // TODO uncomment below to declare an instance variable for Order + //private Order instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Order + //instance = new Order(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Order + /// + [Test] + public void OrderInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Order + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Order"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO unit test for the property 'Id' + } + /// + /// Test the property 'PetId' + /// + [Test] + public void PetIdTest() + { + // TODO unit test for the property 'PetId' + } + /// + /// Test the property 'Quantity' + /// + [Test] + public void QuantityTest() + { + // TODO unit test for the property 'Quantity' + } + /// + /// Test the property 'ShipDate' + /// + [Test] + public void ShipDateTest() + { + // TODO unit test for the property 'ShipDate' + } + /// + /// Test the property 'Status' + /// + [Test] + public void StatusTest() + { + // TODO unit test for the property 'Status' + } + /// + /// Test the property 'Complete' + /// + [Test] + public void CompleteTest() + { + // TODO unit test for the property 'Complete' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterCompositeTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterCompositeTests.cs new file mode 100644 index 0000000000..7069f4e955 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterCompositeTests.cs @@ -0,0 +1,96 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing OuterComposite + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class OuterCompositeTests + { + // TODO uncomment below to declare an instance variable for OuterComposite + //private OuterComposite instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of OuterComposite + //instance = new OuterComposite(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of OuterComposite + /// + [Test] + public void OuterCompositeInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" OuterComposite + //Assert.IsInstanceOfType (instance, "variable 'instance' is a OuterComposite"); + } + + + /// + /// Test the property 'MyNumber' + /// + [Test] + public void MyNumberTest() + { + // TODO unit test for the property 'MyNumber' + } + /// + /// Test the property 'MyString' + /// + [Test] + public void MyStringTest() + { + // TODO unit test for the property 'MyString' + } + /// + /// Test the property 'MyBoolean' + /// + [Test] + public void MyBooleanTest() + { + // TODO unit test for the property 'MyBoolean' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterEnumTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterEnumTests.cs new file mode 100644 index 0000000000..f482ff479e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/OuterEnumTests.cs @@ -0,0 +1,72 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing OuterEnum + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class OuterEnumTests + { + // TODO uncomment below to declare an instance variable for OuterEnum + //private OuterEnum instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of OuterEnum + //instance = new OuterEnum(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of OuterEnum + /// + [Test] + public void OuterEnumInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" OuterEnum + //Assert.IsInstanceOfType (instance, "variable 'instance' is a OuterEnum"); + } + + + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/PetTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/PetTests.cs new file mode 100644 index 0000000000..20b3ab12db --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/PetTests.cs @@ -0,0 +1,120 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Pet + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class PetTests + { + // TODO uncomment below to declare an instance variable for Pet + //private Pet instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Pet + //instance = new Pet(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Pet + /// + [Test] + public void PetInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Pet + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Pet"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO unit test for the property 'Id' + } + /// + /// Test the property 'Category' + /// + [Test] + public void CategoryTest() + { + // TODO unit test for the property 'Category' + } + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO unit test for the property 'Name' + } + /// + /// Test the property 'PhotoUrls' + /// + [Test] + public void PhotoUrlsTest() + { + // TODO unit test for the property 'PhotoUrls' + } + /// + /// Test the property 'Tags' + /// + [Test] + public void TagsTest() + { + // TODO unit test for the property 'Tags' + } + /// + /// Test the property 'Status' + /// + [Test] + public void StatusTest() + { + // TODO unit test for the property 'Status' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReadOnlyFirstTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReadOnlyFirstTests.cs new file mode 100644 index 0000000000..cf1a8f54bb --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReadOnlyFirstTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing ReadOnlyFirst + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ReadOnlyFirstTests + { + // TODO uncomment below to declare an instance variable for ReadOnlyFirst + //private ReadOnlyFirst instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of ReadOnlyFirst + //instance = new ReadOnlyFirst(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of ReadOnlyFirst + /// + [Test] + public void ReadOnlyFirstInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" ReadOnlyFirst + //Assert.IsInstanceOfType (instance, "variable 'instance' is a ReadOnlyFirst"); + } + + + /// + /// Test the property 'Bar' + /// + [Test] + public void BarTest() + { + // TODO unit test for the property 'Bar' + } + /// + /// Test the property 'Baz' + /// + [Test] + public void BazTest() + { + // TODO unit test for the property 'Baz' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReturnTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReturnTests.cs new file mode 100644 index 0000000000..1ac79a9f91 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/ReturnTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Return + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class ReturnTests + { + // TODO uncomment below to declare an instance variable for Return + //private Return instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Return + //instance = new Return(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Return + /// + [Test] + public void ReturnInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Return + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Return"); + } + + + /// + /// Test the property '_Return' + /// + [Test] + public void _ReturnTest() + { + // TODO unit test for the property '_Return' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/SpecialModelNameTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/SpecialModelNameTests.cs new file mode 100644 index 0000000000..0a4dcb6a7b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/SpecialModelNameTests.cs @@ -0,0 +1,80 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing SpecialModelName + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class SpecialModelNameTests + { + // TODO uncomment below to declare an instance variable for SpecialModelName + //private SpecialModelName instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of SpecialModelName + //instance = new SpecialModelName(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of SpecialModelName + /// + [Test] + public void SpecialModelNameInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" SpecialModelName + //Assert.IsInstanceOfType (instance, "variable 'instance' is a SpecialModelName"); + } + + + /// + /// Test the property 'SpecialPropertyName' + /// + [Test] + public void SpecialPropertyNameTest() + { + // TODO unit test for the property 'SpecialPropertyName' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/StringBooleanMapTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/StringBooleanMapTests.cs new file mode 100644 index 0000000000..efc4cd9077 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/StringBooleanMapTests.cs @@ -0,0 +1,72 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing StringBooleanMap + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class StringBooleanMapTests + { + // TODO uncomment below to declare an instance variable for StringBooleanMap + //private StringBooleanMap instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of StringBooleanMap + //instance = new StringBooleanMap(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of StringBooleanMap + /// + [Test] + public void StringBooleanMapInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" StringBooleanMap + //Assert.IsInstanceOfType (instance, "variable 'instance' is a StringBooleanMap"); + } + + + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/TagTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/TagTests.cs new file mode 100644 index 0000000000..52ee4ca988 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/TagTests.cs @@ -0,0 +1,88 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing Tag + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class TagTests + { + // TODO uncomment below to declare an instance variable for Tag + //private Tag instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of Tag + //instance = new Tag(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of Tag + /// + [Test] + public void TagInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" Tag + //Assert.IsInstanceOfType (instance, "variable 'instance' is a Tag"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO unit test for the property 'Id' + } + /// + /// Test the property 'Name' + /// + [Test] + public void NameTest() + { + // TODO unit test for the property 'Name' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/UserTests.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/UserTests.cs new file mode 100644 index 0000000000..8e073d2aa0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Model/UserTests.cs @@ -0,0 +1,136 @@ +/* + * 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 NUnit.Framework; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Model; +using Org.OpenAPITools.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Org.OpenAPITools.Test +{ + /// + /// Class for testing User + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + [TestFixture] + public class UserTests + { + // TODO uncomment below to declare an instance variable for User + //private User instance; + + /// + /// Setup before each test + /// + [SetUp] + public void Init() + { + // TODO uncomment below to create an instance of User + //instance = new User(); + } + + /// + /// Clean up after each test + /// + [TearDown] + public void Cleanup() + { + + } + + /// + /// Test an instance of User + /// + [Test] + public void UserInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" User + //Assert.IsInstanceOfType (instance, "variable 'instance' is a User"); + } + + + /// + /// Test the property 'Id' + /// + [Test] + public void IdTest() + { + // TODO unit test for the property 'Id' + } + /// + /// Test the property 'Username' + /// + [Test] + public void UsernameTest() + { + // TODO unit test for the property 'Username' + } + /// + /// Test the property 'FirstName' + /// + [Test] + public void FirstNameTest() + { + // TODO unit test for the property 'FirstName' + } + /// + /// Test the property 'LastName' + /// + [Test] + public void LastNameTest() + { + // TODO unit test for the property 'LastName' + } + /// + /// Test the property 'Email' + /// + [Test] + public void EmailTest() + { + // TODO unit test for the property 'Email' + } + /// + /// Test the property 'Password' + /// + [Test] + public void PasswordTest() + { + // TODO unit test for the property 'Password' + } + /// + /// Test the property 'Phone' + /// + [Test] + public void PhoneTest() + { + // TODO unit test for the property 'Phone' + } + /// + /// Test the property 'UserStatus' + /// + [Test] + public void UserStatusTest() + { + // TODO unit test for the property 'UserStatus' + } + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj new file mode 100644 index 0000000000..48ec5e0f7c --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {19F1DEBC-DE5E-4517-8062-F000CD499087} + Library + Properties + Org.OpenAPITools.Test + Org.OpenAPITools.Test + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\..\vendor\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + + + $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\..\vendor\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + + + $(SolutionDir)\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\..\vendor\RestSharp.105.1.0\lib\net45\RestSharp.dll + + + $(SolutionDir)\packages\NUnit.2.6.4\lib\nunit.framework.dll + ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll + ..\..\vendor\NUnit.2.6.4\lib\nunit.framework.dll + + + + + + + + + + + + {321C8C3F-0156-40C1-AE42-D59761FB9B6C} + Org.OpenAPITools + + + + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/packages.config b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/packages.config new file mode 100644 index 0000000000..ac390c1dcb --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools.Test/packages.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs new file mode 100644 index 0000000000..7ad377f91f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -0,0 +1,314 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IAnotherFakeApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// To test special tags + /// + /// + /// To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + ModelClient Call123TestSpecialTags (ModelClient modelClient); + + /// + /// To test special tags + /// + /// + /// To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + ApiResponse Call123TestSpecialTagsWithHttpInfo (ModelClient modelClient); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IAnotherFakeApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// To test special tags + /// + /// + /// To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + System.Threading.Tasks.Task Call123TestSpecialTagsAsync (ModelClient modelClient); + + /// + /// To test special tags + /// + /// + /// To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + System.Threading.Tasks.Task> Call123TestSpecialTagsAsyncWithHttpInfo (ModelClient modelClient); + #endregion Asynchronous Operations + } + + public interface IAnotherFakeApi : IAnotherFakeApiSync, IAnotherFakeApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class AnotherFakeApi : IAnotherFakeApi + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public AnotherFakeApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public AnotherFakeApi(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public AnotherFakeApi(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public AnotherFakeApi(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// To test special tags To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + public ModelClient Call123TestSpecialTags (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = Call123TestSpecialTagsWithHttpInfo(modelClient); + return localVarResponse.Data; + } + + /// + /// To test special tags To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + public Org.OpenAPITools.Client.ApiResponse< ModelClient > Call123TestSpecialTagsWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling AnotherFakeApi->Call123TestSpecialTags"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + + // make the HTTP request + + var response = this.Client.Patch< ModelClient >("/another-fake/dummy", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("Call123TestSpecialTags", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test special tags To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + public async System.Threading.Tasks.Task Call123TestSpecialTagsAsync (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await Call123TestSpecialTagsAsyncWithHttpInfo(modelClient); + return localVarResponse.Data; + + } + + /// + /// To test special tags To test special tags and operation ID starting with number + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + public async System.Threading.Tasks.Task> Call123TestSpecialTagsAsyncWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling AnotherFakeApi->Call123TestSpecialTags"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PatchAsync("/another-fake/dummy", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("Call123TestSpecialTags", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs new file mode 100644 index 0000000000..ff8ead2321 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -0,0 +1,2575 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IFakeApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// + /// + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// bool? + bool? FakeOuterBooleanSerialize (bool? body = null); + + /// + /// + /// + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// ApiResponse of bool? + ApiResponse FakeOuterBooleanSerializeWithHttpInfo (bool? body = null); + /// + /// + /// + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// OuterComposite + OuterComposite FakeOuterCompositeSerialize (OuterComposite outerComposite = null); + + /// + /// + /// + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// ApiResponse of OuterComposite + ApiResponse FakeOuterCompositeSerializeWithHttpInfo (OuterComposite outerComposite = null); + /// + /// + /// + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// decimal? + decimal? FakeOuterNumberSerialize (decimal? body = null); + + /// + /// + /// + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// ApiResponse of decimal? + ApiResponse FakeOuterNumberSerializeWithHttpInfo (decimal? body = null); + /// + /// + /// + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// string + string FakeOuterStringSerialize (string body = null); + + /// + /// + /// + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// ApiResponse of string + ApiResponse FakeOuterStringSerializeWithHttpInfo (string body = null); + /// + /// + /// + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// + void TestBodyWithFileSchema (FileSchemaTestClass fileSchemaTestClass); + + /// + /// + /// + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of Object(void) + ApiResponse TestBodyWithFileSchemaWithHttpInfo (FileSchemaTestClass fileSchemaTestClass); + /// + /// + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// + void TestBodyWithQueryParams (string query, User user); + + /// + /// + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// ApiResponse of Object(void) + ApiResponse TestBodyWithQueryParamsWithHttpInfo (string query, User user); + /// + /// To test \"client\" model + /// + /// + /// To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + ModelClient TestClientModel (ModelClient modelClient); + + /// + /// To test \"client\" model + /// + /// + /// To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + ApiResponse TestClientModelWithHttpInfo (ModelClient modelClient); + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// + 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); + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// ApiResponse of Object(void) + ApiResponse TestEndpointParametersWithHttpInfo (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); + /// + /// To test enum parameters + /// + /// + /// To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// + void TestEnumParameters (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null); + + /// + /// To test enum parameters + /// + /// + /// To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// ApiResponse of Object(void) + ApiResponse TestEnumParametersWithHttpInfo (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null); + /// + /// Fake endpoint to test group parameters (optional) + /// + /// + /// Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// + void TestGroupParameters (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null); + + /// + /// Fake endpoint to test group parameters (optional) + /// + /// + /// Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// ApiResponse of Object(void) + ApiResponse TestGroupParametersWithHttpInfo (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null); + /// + /// test inline additionalProperties + /// + /// + /// + /// + /// Thrown when fails to make API call + /// request body + /// + void TestInlineAdditionalProperties (Dictionary requestBody); + + /// + /// test inline additionalProperties + /// + /// + /// + /// + /// Thrown when fails to make API call + /// request body + /// ApiResponse of Object(void) + ApiResponse TestInlineAdditionalPropertiesWithHttpInfo (Dictionary requestBody); + /// + /// test json serialization of form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// + void TestJsonFormData (string param, string param2); + + /// + /// test json serialization of form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// ApiResponse of Object(void) + ApiResponse TestJsonFormDataWithHttpInfo (string param, string param2); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IFakeApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// + /// + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// Task of bool? + System.Threading.Tasks.Task FakeOuterBooleanSerializeAsync (bool? body = null); + + /// + /// + /// + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// Task of ApiResponse (bool?) + System.Threading.Tasks.Task> FakeOuterBooleanSerializeAsyncWithHttpInfo (bool? body = null); + /// + /// + /// + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// Task of OuterComposite + System.Threading.Tasks.Task FakeOuterCompositeSerializeAsync (OuterComposite outerComposite = null); + + /// + /// + /// + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// Task of ApiResponse (OuterComposite) + System.Threading.Tasks.Task> FakeOuterCompositeSerializeAsyncWithHttpInfo (OuterComposite outerComposite = null); + /// + /// + /// + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// Task of decimal? + System.Threading.Tasks.Task FakeOuterNumberSerializeAsync (decimal? body = null); + + /// + /// + /// + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// Task of ApiResponse (decimal?) + System.Threading.Tasks.Task> FakeOuterNumberSerializeAsyncWithHttpInfo (decimal? body = null); + /// + /// + /// + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// Task of string + System.Threading.Tasks.Task FakeOuterStringSerializeAsync (string body = null); + + /// + /// + /// + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// Task of ApiResponse (string) + System.Threading.Tasks.Task> FakeOuterStringSerializeAsyncWithHttpInfo (string body = null); + /// + /// + /// + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// Task of void + System.Threading.Tasks.Task TestBodyWithFileSchemaAsync (FileSchemaTestClass fileSchemaTestClass); + + /// + /// + /// + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// Task of ApiResponse + System.Threading.Tasks.Task> TestBodyWithFileSchemaAsyncWithHttpInfo (FileSchemaTestClass fileSchemaTestClass); + /// + /// + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// Task of void + System.Threading.Tasks.Task TestBodyWithQueryParamsAsync (string query, User user); + + /// + /// + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// Task of ApiResponse + System.Threading.Tasks.Task> TestBodyWithQueryParamsAsyncWithHttpInfo (string query, User user); + /// + /// To test \"client\" model + /// + /// + /// To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + System.Threading.Tasks.Task TestClientModelAsync (ModelClient modelClient); + + /// + /// To test \"client\" model + /// + /// + /// To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + System.Threading.Tasks.Task> TestClientModelAsyncWithHttpInfo (ModelClient modelClient); + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// Task of void + System.Threading.Tasks.Task TestEndpointParametersAsync (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); + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task> TestEndpointParametersAsyncWithHttpInfo (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); + /// + /// To test enum parameters + /// + /// + /// To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// Task of void + System.Threading.Tasks.Task TestEnumParametersAsync (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null); + + /// + /// To test enum parameters + /// + /// + /// To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// Task of ApiResponse + System.Threading.Tasks.Task> TestEnumParametersAsyncWithHttpInfo (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null); + /// + /// Fake endpoint to test group parameters (optional) + /// + /// + /// Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// Task of void + System.Threading.Tasks.Task TestGroupParametersAsync (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null); + + /// + /// Fake endpoint to test group parameters (optional) + /// + /// + /// Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task> TestGroupParametersAsyncWithHttpInfo (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null); + /// + /// test inline additionalProperties + /// + /// + /// + /// + /// Thrown when fails to make API call + /// request body + /// Task of void + System.Threading.Tasks.Task TestInlineAdditionalPropertiesAsync (Dictionary requestBody); + + /// + /// test inline additionalProperties + /// + /// + /// + /// + /// Thrown when fails to make API call + /// request body + /// Task of ApiResponse + System.Threading.Tasks.Task> TestInlineAdditionalPropertiesAsyncWithHttpInfo (Dictionary requestBody); + /// + /// test json serialization of form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// Task of void + System.Threading.Tasks.Task TestJsonFormDataAsync (string param, string param2); + + /// + /// test json serialization of form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// Task of ApiResponse + System.Threading.Tasks.Task> TestJsonFormDataAsyncWithHttpInfo (string param, string param2); + #endregion Asynchronous Operations + } + + public interface IFakeApi : IFakeApiSync, IFakeApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class FakeApi : IFakeApi + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public FakeApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public FakeApi(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public FakeApi(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public FakeApi(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// bool? + public bool? FakeOuterBooleanSerialize (bool? body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = FakeOuterBooleanSerializeWithHttpInfo(body); + return localVarResponse.Data; + } + + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// ApiResponse of bool? + public Org.OpenAPITools.Client.ApiResponse< bool? > FakeOuterBooleanSerializeWithHttpInfo (bool? body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = this.Client.Post< bool? >("/fake/outer/boolean", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterBooleanSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// Task of bool? + public async System.Threading.Tasks.Task FakeOuterBooleanSerializeAsync (bool? body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await FakeOuterBooleanSerializeAsyncWithHttpInfo(body); + return localVarResponse.Data; + + } + + /// + /// Test serialization of outer boolean types + /// + /// Thrown when fails to make API call + /// Input boolean as post body (optional) + /// Task of ApiResponse (bool?) + public async System.Threading.Tasks.Task> FakeOuterBooleanSerializeAsyncWithHttpInfo (bool? body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/outer/boolean", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterBooleanSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// OuterComposite + public OuterComposite FakeOuterCompositeSerialize (OuterComposite outerComposite = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = FakeOuterCompositeSerializeWithHttpInfo(outerComposite); + return localVarResponse.Data; + } + + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// ApiResponse of OuterComposite + public Org.OpenAPITools.Client.ApiResponse< OuterComposite > FakeOuterCompositeSerializeWithHttpInfo (OuterComposite outerComposite = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = outerComposite; + + + // make the HTTP request + + var response = this.Client.Post< OuterComposite >("/fake/outer/composite", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterCompositeSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// Task of OuterComposite + public async System.Threading.Tasks.Task FakeOuterCompositeSerializeAsync (OuterComposite outerComposite = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await FakeOuterCompositeSerializeAsyncWithHttpInfo(outerComposite); + return localVarResponse.Data; + + } + + /// + /// Test serialization of object with outer number type + /// + /// Thrown when fails to make API call + /// Input composite as post body (optional) + /// Task of ApiResponse (OuterComposite) + public async System.Threading.Tasks.Task> FakeOuterCompositeSerializeAsyncWithHttpInfo (OuterComposite outerComposite = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = outerComposite; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/outer/composite", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterCompositeSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// decimal? + public decimal? FakeOuterNumberSerialize (decimal? body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = FakeOuterNumberSerializeWithHttpInfo(body); + return localVarResponse.Data; + } + + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// ApiResponse of decimal? + public Org.OpenAPITools.Client.ApiResponse< decimal? > FakeOuterNumberSerializeWithHttpInfo (decimal? body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = this.Client.Post< decimal? >("/fake/outer/number", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterNumberSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// Task of decimal? + public async System.Threading.Tasks.Task FakeOuterNumberSerializeAsync (decimal? body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await FakeOuterNumberSerializeAsyncWithHttpInfo(body); + return localVarResponse.Data; + + } + + /// + /// Test serialization of outer number types + /// + /// Thrown when fails to make API call + /// Input number as post body (optional) + /// Task of ApiResponse (decimal?) + public async System.Threading.Tasks.Task> FakeOuterNumberSerializeAsyncWithHttpInfo (decimal? body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/outer/number", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterNumberSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// string + public string FakeOuterStringSerialize (string body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = FakeOuterStringSerializeWithHttpInfo(body); + return localVarResponse.Data; + } + + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// ApiResponse of string + public Org.OpenAPITools.Client.ApiResponse< string > FakeOuterStringSerializeWithHttpInfo (string body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = this.Client.Post< string >("/fake/outer/string", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterStringSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// Task of string + public async System.Threading.Tasks.Task FakeOuterStringSerializeAsync (string body = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await FakeOuterStringSerializeAsyncWithHttpInfo(body); + return localVarResponse.Data; + + } + + /// + /// Test serialization of outer string types + /// + /// Thrown when fails to make API call + /// Input string as post body (optional) + /// Task of ApiResponse (string) + public async System.Threading.Tasks.Task> FakeOuterStringSerializeAsyncWithHttpInfo (string body = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "*/*" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = body; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/outer/string", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FakeOuterStringSerialize", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// + public void TestBodyWithFileSchema (FileSchemaTestClass fileSchemaTestClass) + { + TestBodyWithFileSchemaWithHttpInfo(fileSchemaTestClass); + } + + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestBodyWithFileSchemaWithHttpInfo (FileSchemaTestClass fileSchemaTestClass) + { + // verify the required parameter 'fileSchemaTestClass' is set + if (fileSchemaTestClass == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'fileSchemaTestClass' when calling FakeApi->TestBodyWithFileSchema"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = fileSchemaTestClass; + + + // make the HTTP request + + var response = this.Client.Put("/fake/body-with-file-schema", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestBodyWithFileSchema", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// Task of void + public async System.Threading.Tasks.Task TestBodyWithFileSchemaAsync (FileSchemaTestClass fileSchemaTestClass) + { + await TestBodyWithFileSchemaAsyncWithHttpInfo(fileSchemaTestClass); + + } + + /// + /// For this test, the body for this request much reference a schema named `File`. + /// + /// Thrown when fails to make API call + /// + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestBodyWithFileSchemaAsyncWithHttpInfo (FileSchemaTestClass fileSchemaTestClass) + { + // verify the required parameter 'fileSchemaTestClass' is set + if (fileSchemaTestClass == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'fileSchemaTestClass' when calling FakeApi->TestBodyWithFileSchema"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = fileSchemaTestClass; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PutAsync("/fake/body-with-file-schema", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestBodyWithFileSchema", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// + public void TestBodyWithQueryParams (string query, User user) + { + TestBodyWithQueryParamsWithHttpInfo(query, user); + } + + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestBodyWithQueryParamsWithHttpInfo (string query, User user) + { + // verify the required parameter 'query' is set + if (query == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'query' when calling FakeApi->TestBodyWithQueryParams"); + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling FakeApi->TestBodyWithQueryParams"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (query != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "query", query)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + requestOptions.Data = user; + + + // make the HTTP request + + var response = this.Client.Put("/fake/body-with-query-params", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestBodyWithQueryParams", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// Task of void + public async System.Threading.Tasks.Task TestBodyWithQueryParamsAsync (string query, User user) + { + await TestBodyWithQueryParamsAsyncWithHttpInfo(query, user); + + } + + /// + /// + /// + /// Thrown when fails to make API call + /// + /// + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestBodyWithQueryParamsAsyncWithHttpInfo (string query, User user) + { + // verify the required parameter 'query' is set + if (query == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'query' when calling FakeApi->TestBodyWithQueryParams"); + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling FakeApi->TestBodyWithQueryParams"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (query != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "query", query)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + requestOptions.Data = user; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PutAsync("/fake/body-with-query-params", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestBodyWithQueryParams", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test \"client\" model To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + public ModelClient TestClientModel (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = TestClientModelWithHttpInfo(modelClient); + return localVarResponse.Data; + } + + /// + /// To test \"client\" model To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + public Org.OpenAPITools.Client.ApiResponse< ModelClient > TestClientModelWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling FakeApi->TestClientModel"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + + // make the HTTP request + + var response = this.Client.Patch< ModelClient >("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestClientModel", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test \"client\" model To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + public async System.Threading.Tasks.Task TestClientModelAsync (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await TestClientModelAsyncWithHttpInfo(modelClient); + return localVarResponse.Data; + + } + + /// + /// To test \"client\" model To test \"client\" model + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + public async System.Threading.Tasks.Task> TestClientModelAsyncWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling FakeApi->TestClientModel"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PatchAsync("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestClientModel", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// + public 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) + { + TestEndpointParametersWithHttpInfo(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback); + } + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestEndpointParametersWithHttpInfo (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) + { + // verify the required parameter 'number' is set + if (number == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'number' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter '_double' is set + if (_double == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter '_double' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter 'patternWithoutDelimiter' is set + if (patternWithoutDelimiter == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'patternWithoutDelimiter' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter '_byte' is set + if (_byte == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter '_byte' when calling FakeApi->TestEndpointParameters"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (integer != null) + { + requestOptions.FormParameters.Add("integer", Org.OpenAPITools.Client.ClientUtils.ParameterToString(integer)); // form parameter + } + if (int32 != null) + { + requestOptions.FormParameters.Add("int32", Org.OpenAPITools.Client.ClientUtils.ParameterToString(int32)); // form parameter + } + if (int64 != null) + { + requestOptions.FormParameters.Add("int64", Org.OpenAPITools.Client.ClientUtils.ParameterToString(int64)); // form parameter + } + if (number != null) + { + requestOptions.FormParameters.Add("number", Org.OpenAPITools.Client.ClientUtils.ParameterToString(number)); // form parameter + } + if (_float != null) + { + requestOptions.FormParameters.Add("float", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_float)); // form parameter + } + if (_double != null) + { + requestOptions.FormParameters.Add("double", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_double)); // form parameter + } + if (_string != null) + { + requestOptions.FormParameters.Add("string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_string)); // form parameter + } + if (patternWithoutDelimiter != null) + { + requestOptions.FormParameters.Add("pattern_without_delimiter", Org.OpenAPITools.Client.ClientUtils.ParameterToString(patternWithoutDelimiter)); // form parameter + } + if (_byte != null) + { + requestOptions.FormParameters.Add("byte", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_byte)); // form parameter + } + if (binary != null) + { + requestOptions.FileParameters.Add("binary", binary); + } + if (date != null) + { + requestOptions.FormParameters.Add("date", Org.OpenAPITools.Client.ClientUtils.ParameterToString(date)); // form parameter + } + if (dateTime != null) + { + requestOptions.FormParameters.Add("dateTime", Org.OpenAPITools.Client.ClientUtils.ParameterToString(dateTime)); // form parameter + } + if (password != null) + { + requestOptions.FormParameters.Add("password", Org.OpenAPITools.Client.ClientUtils.ParameterToString(password)); // form parameter + } + if (callback != null) + { + requestOptions.FormParameters.Add("callback", Org.OpenAPITools.Client.ClientUtils.ParameterToString(callback)); // form parameter + } + + // authentication (http_basic_test) required + // http basic authentication required + if (!String.IsNullOrEmpty(this.Configuration.Username) || !String.IsNullOrEmpty(this.Configuration.Password)) + { + requestOptions.HeaderParameters.Add("Authorization", "Basic " + Org.OpenAPITools.Client.ClientUtils.Base64Encode(this.Configuration.Username + ":" + this.Configuration.Password)); + } + + // make the HTTP request + + var response = this.Client.Post("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestEndpointParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// Task of void + public async System.Threading.Tasks.Task TestEndpointParametersAsync (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) + { + await TestEndpointParametersAsyncWithHttpInfo(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback); + + } + + /// + /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Thrown when fails to make API call + /// None + /// None + /// None + /// None + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// None (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestEndpointParametersAsyncWithHttpInfo (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) + { + // verify the required parameter 'number' is set + if (number == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'number' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter '_double' is set + if (_double == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter '_double' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter 'patternWithoutDelimiter' is set + if (patternWithoutDelimiter == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'patternWithoutDelimiter' when calling FakeApi->TestEndpointParameters"); + // verify the required parameter '_byte' is set + if (_byte == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter '_byte' when calling FakeApi->TestEndpointParameters"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (integer != null) + { + requestOptions.FormParameters.Add("integer", Org.OpenAPITools.Client.ClientUtils.ParameterToString(integer)); // form parameter + } + if (int32 != null) + { + requestOptions.FormParameters.Add("int32", Org.OpenAPITools.Client.ClientUtils.ParameterToString(int32)); // form parameter + } + if (int64 != null) + { + requestOptions.FormParameters.Add("int64", Org.OpenAPITools.Client.ClientUtils.ParameterToString(int64)); // form parameter + } + if (number != null) + { + requestOptions.FormParameters.Add("number", Org.OpenAPITools.Client.ClientUtils.ParameterToString(number)); // form parameter + } + if (_float != null) + { + requestOptions.FormParameters.Add("float", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_float)); // form parameter + } + if (_double != null) + { + requestOptions.FormParameters.Add("double", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_double)); // form parameter + } + if (_string != null) + { + requestOptions.FormParameters.Add("string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_string)); // form parameter + } + if (patternWithoutDelimiter != null) + { + requestOptions.FormParameters.Add("pattern_without_delimiter", Org.OpenAPITools.Client.ClientUtils.ParameterToString(patternWithoutDelimiter)); // form parameter + } + if (_byte != null) + { + requestOptions.FormParameters.Add("byte", Org.OpenAPITools.Client.ClientUtils.ParameterToString(_byte)); // form parameter + } + if (binary != null) + { + requestOptions.FileParameters.Add("binary", binary); + } + if (date != null) + { + requestOptions.FormParameters.Add("date", Org.OpenAPITools.Client.ClientUtils.ParameterToString(date)); // form parameter + } + if (dateTime != null) + { + requestOptions.FormParameters.Add("dateTime", Org.OpenAPITools.Client.ClientUtils.ParameterToString(dateTime)); // form parameter + } + if (password != null) + { + requestOptions.FormParameters.Add("password", Org.OpenAPITools.Client.ClientUtils.ParameterToString(password)); // form parameter + } + if (callback != null) + { + requestOptions.FormParameters.Add("callback", Org.OpenAPITools.Client.ClientUtils.ParameterToString(callback)); // form parameter + } + + // authentication (http_basic_test) required + // http basic authentication required + if (!String.IsNullOrEmpty(this.Configuration.Username) || !String.IsNullOrEmpty(this.Configuration.Password)) + { + requestOptions.HeaderParameters.Add("Authorization", "Basic " + Org.OpenAPITools.Client.ClientUtils.Base64Encode(this.Configuration.Username + ":" + this.Configuration.Password)); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestEndpointParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test enum parameters To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// + public void TestEnumParameters (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null) + { + TestEnumParametersWithHttpInfo(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); + } + + /// + /// To test enum parameters To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestEnumParametersWithHttpInfo (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (enumQueryStringArray != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "enum_query_string_array", enumQueryStringArray)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryString != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_string", enumQueryString)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryInteger != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_integer", enumQueryInteger)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryDouble != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_double", enumQueryDouble)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumHeaderStringArray != null) + requestOptions.HeaderParameters.Add("enum_header_string_array", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumHeaderStringArray)); // header parameter + if (enumHeaderString != null) + requestOptions.HeaderParameters.Add("enum_header_string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumHeaderString)); // header parameter + if (enumFormStringArray != null) + { + requestOptions.FormParameters.Add("enum_form_string_array", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumFormStringArray)); // form parameter + } + if (enumFormString != null) + { + requestOptions.FormParameters.Add("enum_form_string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumFormString)); // form parameter + } + + + // make the HTTP request + + var response = this.Client.Get("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestEnumParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test enum parameters To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// Task of void + public async System.Threading.Tasks.Task TestEnumParametersAsync (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null) + { + await TestEnumParametersAsyncWithHttpInfo(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); + + } + + /// + /// To test enum parameters To test enum parameters + /// + /// Thrown when fails to make API call + /// Header parameter enum test (string array) (optional) + /// Header parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (string array) (optional) + /// Query parameter enum test (string) (optional, default to -efg) + /// Query parameter enum test (double) (optional) + /// Query parameter enum test (double) (optional) + /// Form parameter enum test (string array) (optional, default to $) + /// Form parameter enum test (string) (optional, default to -efg) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestEnumParametersAsyncWithHttpInfo (List enumHeaderStringArray = null, string enumHeaderString = null, List enumQueryStringArray = null, string enumQueryString = null, int? enumQueryInteger = null, double? enumQueryDouble = null, List enumFormStringArray = null, string enumFormString = null) + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (enumQueryStringArray != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "enum_query_string_array", enumQueryStringArray)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryString != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_string", enumQueryString)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryInteger != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_integer", enumQueryInteger)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumQueryDouble != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "enum_query_double", enumQueryDouble)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (enumHeaderStringArray != null) + requestOptions.HeaderParameters.Add("enum_header_string_array", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumHeaderStringArray)); // header parameter + if (enumHeaderString != null) + requestOptions.HeaderParameters.Add("enum_header_string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumHeaderString)); // header parameter + if (enumFormStringArray != null) + { + requestOptions.FormParameters.Add("enum_form_string_array", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumFormStringArray)); // form parameter + } + if (enumFormString != null) + { + requestOptions.FormParameters.Add("enum_form_string", Org.OpenAPITools.Client.ClientUtils.ParameterToString(enumFormString)); // form parameter + } + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestEnumParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Fake endpoint to test group parameters (optional) Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// + public void TestGroupParameters (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null) + { + TestGroupParametersWithHttpInfo(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group); + } + + /// + /// Fake endpoint to test group parameters (optional) Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestGroupParametersWithHttpInfo (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null) + { + // verify the required parameter 'requiredStringGroup' is set + if (requiredStringGroup == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredStringGroup' when calling FakeApi->TestGroupParameters"); + // verify the required parameter 'requiredBooleanGroup' is set + if (requiredBooleanGroup == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredBooleanGroup' when calling FakeApi->TestGroupParameters"); + // verify the required parameter 'requiredInt64Group' is set + if (requiredInt64Group == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredInt64Group' when calling FakeApi->TestGroupParameters"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (requiredStringGroup != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "required_string_group", requiredStringGroup)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (requiredInt64Group != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "required_int64_group", requiredInt64Group)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (stringGroup != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "string_group", stringGroup)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (int64Group != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "int64_group", int64Group)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (requiredBooleanGroup != null) + requestOptions.HeaderParameters.Add("required_boolean_group", Org.OpenAPITools.Client.ClientUtils.ParameterToString(requiredBooleanGroup)); // header parameter + if (booleanGroup != null) + requestOptions.HeaderParameters.Add("boolean_group", Org.OpenAPITools.Client.ClientUtils.ParameterToString(booleanGroup)); // header parameter + + + // make the HTTP request + + var response = this.Client.Delete("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestGroupParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Fake endpoint to test group parameters (optional) Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// Task of void + public async System.Threading.Tasks.Task TestGroupParametersAsync (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null) + { + await TestGroupParametersAsyncWithHttpInfo(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group); + + } + + /// + /// Fake endpoint to test group parameters (optional) Fake endpoint to test group parameters (optional) + /// + /// Thrown when fails to make API call + /// Required String in group parameters + /// Required Boolean in group parameters + /// Required Integer in group parameters + /// String in group parameters (optional) + /// Boolean in group parameters (optional) + /// Integer in group parameters (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestGroupParametersAsyncWithHttpInfo (int? requiredStringGroup, bool? requiredBooleanGroup, long? requiredInt64Group, int? stringGroup = null, bool? booleanGroup = null, long? int64Group = null) + { + // verify the required parameter 'requiredStringGroup' is set + if (requiredStringGroup == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredStringGroup' when calling FakeApi->TestGroupParameters"); + // verify the required parameter 'requiredBooleanGroup' is set + if (requiredBooleanGroup == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredBooleanGroup' when calling FakeApi->TestGroupParameters"); + // verify the required parameter 'requiredInt64Group' is set + if (requiredInt64Group == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredInt64Group' when calling FakeApi->TestGroupParameters"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (requiredStringGroup != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "required_string_group", requiredStringGroup)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (requiredInt64Group != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "required_int64_group", requiredInt64Group)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (stringGroup != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "string_group", stringGroup)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (int64Group != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "int64_group", int64Group)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (requiredBooleanGroup != null) + requestOptions.HeaderParameters.Add("required_boolean_group", Org.OpenAPITools.Client.ClientUtils.ParameterToString(requiredBooleanGroup)); // header parameter + if (booleanGroup != null) + requestOptions.HeaderParameters.Add("boolean_group", Org.OpenAPITools.Client.ClientUtils.ParameterToString(booleanGroup)); // header parameter + + + // make the HTTP request + + var response = await this.AsynchronousClient.DeleteAsync("/fake", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestGroupParameters", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// test inline additionalProperties + /// + /// Thrown when fails to make API call + /// request body + /// + public void TestInlineAdditionalProperties (Dictionary requestBody) + { + TestInlineAdditionalPropertiesWithHttpInfo(requestBody); + } + + /// + /// test inline additionalProperties + /// + /// Thrown when fails to make API call + /// request body + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestInlineAdditionalPropertiesWithHttpInfo (Dictionary requestBody) + { + // verify the required parameter 'requestBody' is set + if (requestBody == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requestBody' when calling FakeApi->TestInlineAdditionalProperties"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = requestBody; + + + // make the HTTP request + + var response = this.Client.Post("/fake/inline-additionalProperties", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestInlineAdditionalProperties", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// test inline additionalProperties + /// + /// Thrown when fails to make API call + /// request body + /// Task of void + public async System.Threading.Tasks.Task TestInlineAdditionalPropertiesAsync (Dictionary requestBody) + { + await TestInlineAdditionalPropertiesAsyncWithHttpInfo(requestBody); + + } + + /// + /// test inline additionalProperties + /// + /// Thrown when fails to make API call + /// request body + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestInlineAdditionalPropertiesAsyncWithHttpInfo (Dictionary requestBody) + { + // verify the required parameter 'requestBody' is set + if (requestBody == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requestBody' when calling FakeApi->TestInlineAdditionalProperties"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = requestBody; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/inline-additionalProperties", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestInlineAdditionalProperties", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// test json serialization of form data + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// + public void TestJsonFormData (string param, string param2) + { + TestJsonFormDataWithHttpInfo(param, param2); + } + + /// + /// test json serialization of form data + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse TestJsonFormDataWithHttpInfo (string param, string param2) + { + // verify the required parameter 'param' is set + if (param == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'param' when calling FakeApi->TestJsonFormData"); + // verify the required parameter 'param2' is set + if (param2 == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'param2' when calling FakeApi->TestJsonFormData"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (param != null) + { + requestOptions.FormParameters.Add("param", Org.OpenAPITools.Client.ClientUtils.ParameterToString(param)); // form parameter + } + if (param2 != null) + { + requestOptions.FormParameters.Add("param2", Org.OpenAPITools.Client.ClientUtils.ParameterToString(param2)); // form parameter + } + + + // make the HTTP request + + var response = this.Client.Get("/fake/jsonFormData", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestJsonFormData", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// test json serialization of form data + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// Task of void + public async System.Threading.Tasks.Task TestJsonFormDataAsync (string param, string param2) + { + await TestJsonFormDataAsyncWithHttpInfo(param, param2); + + } + + /// + /// test json serialization of form data + /// + /// Thrown when fails to make API call + /// field1 + /// field2 + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestJsonFormDataAsyncWithHttpInfo (string param, string param2) + { + // verify the required parameter 'param' is set + if (param == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'param' when calling FakeApi->TestJsonFormData"); + // verify the required parameter 'param2' is set + if (param2 == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'param2' when calling FakeApi->TestJsonFormData"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (param != null) + { + requestOptions.FormParameters.Add("param", Org.OpenAPITools.Client.ClientUtils.ParameterToString(param)); // form parameter + } + if (param2 != null) + { + requestOptions.FormParameters.Add("param2", Org.OpenAPITools.Client.ClientUtils.ParameterToString(param2)); // form parameter + } + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/fake/jsonFormData", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestJsonFormData", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs new file mode 100644 index 0000000000..8ad7b90404 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs @@ -0,0 +1,336 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IFakeClassnameTags123ApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// To test class name in snake case + /// + /// + /// To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + ModelClient TestClassname (ModelClient modelClient); + + /// + /// To test class name in snake case + /// + /// + /// To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + ApiResponse TestClassnameWithHttpInfo (ModelClient modelClient); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IFakeClassnameTags123ApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// To test class name in snake case + /// + /// + /// To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + System.Threading.Tasks.Task TestClassnameAsync (ModelClient modelClient); + + /// + /// To test class name in snake case + /// + /// + /// To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + System.Threading.Tasks.Task> TestClassnameAsyncWithHttpInfo (ModelClient modelClient); + #endregion Asynchronous Operations + } + + public interface IFakeClassnameTags123Api : IFakeClassnameTags123ApiSync, IFakeClassnameTags123ApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class FakeClassnameTags123Api : IFakeClassnameTags123Api + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public FakeClassnameTags123Api() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public FakeClassnameTags123Api(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public FakeClassnameTags123Api(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public FakeClassnameTags123Api(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// To test class name in snake case To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// ModelClient + public ModelClient TestClassname (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = TestClassnameWithHttpInfo(modelClient); + return localVarResponse.Data; + } + + /// + /// To test class name in snake case To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// ApiResponse of ModelClient + public Org.OpenAPITools.Client.ApiResponse< ModelClient > TestClassnameWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling FakeClassnameTags123Api->TestClassname"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + // authentication (api_key_query) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key_query"))) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "api_key_query", this.Configuration.GetApiKeyWithPrefix("api_key_query"))) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // make the HTTP request + + var response = this.Client.Patch< ModelClient >("/fake_classname_test", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestClassname", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// To test class name in snake case To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// Task of ModelClient + public async System.Threading.Tasks.Task TestClassnameAsync (ModelClient modelClient) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await TestClassnameAsyncWithHttpInfo(modelClient); + return localVarResponse.Data; + + } + + /// + /// To test class name in snake case To test class name in snake case + /// + /// Thrown when fails to make API call + /// client model + /// Task of ApiResponse (ModelClient) + public async System.Threading.Tasks.Task> TestClassnameAsyncWithHttpInfo (ModelClient modelClient) + { + // verify the required parameter 'modelClient' is set + if (modelClient == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'modelClient' when calling FakeClassnameTags123Api->TestClassname"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = modelClient; + + // authentication (api_key_query) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key_query"))) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "api_key_query", this.Configuration.GetApiKeyWithPrefix("api_key_query"))) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PatchAsync("/fake_classname_test", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("TestClassname", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/PetApi.cs new file mode 100644 index 0000000000..75e6be97b8 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/PetApi.cs @@ -0,0 +1,1822 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IPetApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// + void AddPet (Pet pet); + + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// ApiResponse of Object(void) + ApiResponse AddPetWithHttpInfo (Pet pet); + /// + /// Deletes a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// + void DeletePet (long? petId, string apiKey = null); + + /// + /// Deletes a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// ApiResponse of Object(void) + ApiResponse DeletePetWithHttpInfo (long? petId, string apiKey = null); + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// List<Pet> + List FindPetsByStatus (List status); + + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// ApiResponse of List<Pet> + ApiResponse> FindPetsByStatusWithHttpInfo (List status); + /// + /// Finds Pets by tags + /// + /// + /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// List<Pet> + List FindPetsByTags (List tags); + + /// + /// Finds Pets by tags + /// + /// + /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// ApiResponse of List<Pet> + ApiResponse> FindPetsByTagsWithHttpInfo (List tags); + /// + /// Find pet by ID + /// + /// + /// Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Pet + Pet GetPetById (long? petId); + + /// + /// Find pet by ID + /// + /// + /// Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// ApiResponse of Pet + ApiResponse GetPetByIdWithHttpInfo (long? petId); + /// + /// Update an existing pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// + void UpdatePet (Pet pet); + + /// + /// Update an existing pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// ApiResponse of Object(void) + ApiResponse UpdatePetWithHttpInfo (Pet pet); + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// + void UpdatePetWithForm (long? petId, string name = null, string status = null); + + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// ApiResponse of Object(void) + ApiResponse UpdatePetWithFormWithHttpInfo (long? petId, string name = null, string status = null); + /// + /// uploads an image + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// ApiResponse + ApiResponse UploadFile (long? petId, string additionalMetadata = null, System.IO.Stream file = null); + + /// + /// uploads an image + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// ApiResponse of ApiResponse + ApiResponse UploadFileWithHttpInfo (long? petId, string additionalMetadata = null, System.IO.Stream file = null); + /// + /// uploads an image (required) + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// ApiResponse + ApiResponse UploadFileWithRequiredFile (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null); + + /// + /// uploads an image (required) + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// ApiResponse of ApiResponse + ApiResponse UploadFileWithRequiredFileWithHttpInfo (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IPetApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of void + System.Threading.Tasks.Task AddPetAsync (Pet pet); + + /// + /// Add a new pet to the store + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of ApiResponse + System.Threading.Tasks.Task> AddPetAsyncWithHttpInfo (Pet pet); + /// + /// Deletes a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// Task of void + System.Threading.Tasks.Task DeletePetAsync (long? petId, string apiKey = null); + + /// + /// Deletes a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task> DeletePetAsyncWithHttpInfo (long? petId, string apiKey = null); + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// Task of List<Pet> + System.Threading.Tasks.Task> FindPetsByStatusAsync (List status); + + /// + /// Finds Pets by status + /// + /// + /// Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// Task of ApiResponse (List<Pet>) + System.Threading.Tasks.Task>> FindPetsByStatusAsyncWithHttpInfo (List status); + /// + /// Finds Pets by tags + /// + /// + /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// Task of List<Pet> + System.Threading.Tasks.Task> FindPetsByTagsAsync (List tags); + + /// + /// Finds Pets by tags + /// + /// + /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// Task of ApiResponse (List<Pet>) + System.Threading.Tasks.Task>> FindPetsByTagsAsyncWithHttpInfo (List tags); + /// + /// Find pet by ID + /// + /// + /// Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Task of Pet + System.Threading.Tasks.Task GetPetByIdAsync (long? petId); + + /// + /// Find pet by ID + /// + /// + /// Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Task of ApiResponse (Pet) + System.Threading.Tasks.Task> GetPetByIdAsyncWithHttpInfo (long? petId); + /// + /// Update an existing pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of void + System.Threading.Tasks.Task UpdatePetAsync (Pet pet); + + /// + /// Update an existing pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of ApiResponse + System.Threading.Tasks.Task> UpdatePetAsyncWithHttpInfo (Pet pet); + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// Task of void + System.Threading.Tasks.Task UpdatePetWithFormAsync (long? petId, string name = null, string status = null); + + /// + /// Updates a pet in the store with form data + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task> UpdatePetWithFormAsyncWithHttpInfo (long? petId, string name = null, string status = null); + /// + /// uploads an image + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task UploadFileAsync (long? petId, string additionalMetadata = null, System.IO.Stream file = null); + + /// + /// uploads an image + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// Task of ApiResponse (ApiResponse) + System.Threading.Tasks.Task> UploadFileAsyncWithHttpInfo (long? petId, string additionalMetadata = null, System.IO.Stream file = null); + /// + /// uploads an image (required) + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task UploadFileWithRequiredFileAsync (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null); + + /// + /// uploads an image (required) + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// Task of ApiResponse (ApiResponse) + System.Threading.Tasks.Task> UploadFileWithRequiredFileAsyncWithHttpInfo (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null); + #endregion Asynchronous Operations + } + + public interface IPetApi : IPetApiSync, IPetApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class PetApi : IPetApi + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public PetApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public PetApi(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public PetApi(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public PetApi(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Add a new pet to the store + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// + public void AddPet (Pet pet) + { + AddPetWithHttpInfo(pet); + } + + /// + /// Add a new pet to the store + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse AddPetWithHttpInfo (Pet pet) + { + // verify the required parameter 'pet' is set + if (pet == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'pet' when calling PetApi->AddPet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json", + "application/xml" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = pet; + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Post("/pet", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("AddPet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Add a new pet to the store + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of void + public async System.Threading.Tasks.Task AddPetAsync (Pet pet) + { + await AddPetAsyncWithHttpInfo(pet); + + } + + /// + /// Add a new pet to the store + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of ApiResponse + public async System.Threading.Tasks.Task> AddPetAsyncWithHttpInfo (Pet pet) + { + // verify the required parameter 'pet' is set + if (pet == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'pet' when calling PetApi->AddPet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json", + "application/xml" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = pet; + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/pet", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("AddPet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Deletes a pet + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// + public void DeletePet (long? petId, string apiKey = null) + { + DeletePetWithHttpInfo(petId, apiKey); + } + + /// + /// Deletes a pet + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse DeletePetWithHttpInfo (long? petId, string apiKey = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->DeletePet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (apiKey != null) + requestOptions.HeaderParameters.Add("api_key", Org.OpenAPITools.Client.ClientUtils.ParameterToString(apiKey)); // header parameter + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Delete("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeletePet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Deletes a pet + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// Task of void + public async System.Threading.Tasks.Task DeletePetAsync (long? petId, string apiKey = null) + { + await DeletePetAsyncWithHttpInfo(petId, apiKey); + + } + + /// + /// Deletes a pet + /// + /// Thrown when fails to make API call + /// Pet id to delete + /// (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> DeletePetAsyncWithHttpInfo (long? petId, string apiKey = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->DeletePet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (apiKey != null) + requestOptions.HeaderParameters.Add("api_key", Org.OpenAPITools.Client.ClientUtils.ParameterToString(apiKey)); // header parameter + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.DeleteAsync("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeletePet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Finds Pets by status Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// List<Pet> + public List FindPetsByStatus (List status) + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = FindPetsByStatusWithHttpInfo(status); + return localVarResponse.Data; + } + + /// + /// Finds Pets by status Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// ApiResponse of List<Pet> + public Org.OpenAPITools.Client.ApiResponse< List > FindPetsByStatusWithHttpInfo (List status) + { + // verify the required parameter 'status' is set + if (status == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'status' when calling PetApi->FindPetsByStatus"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (status != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "status", status)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Get< List >("/pet/findByStatus", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FindPetsByStatus", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Finds Pets by status Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// Task of List<Pet> + public async System.Threading.Tasks.Task> FindPetsByStatusAsync (List status) + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = await FindPetsByStatusAsyncWithHttpInfo(status); + return localVarResponse.Data; + + } + + /// + /// Finds Pets by status Multiple status values can be provided with comma separated strings + /// + /// Thrown when fails to make API call + /// Status values that need to be considered for filter + /// Task of ApiResponse (List<Pet>) + public async System.Threading.Tasks.Task>> FindPetsByStatusAsyncWithHttpInfo (List status) + { + // verify the required parameter 'status' is set + if (status == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'status' when calling PetApi->FindPetsByStatus"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (status != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "status", status)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync>("/pet/findByStatus", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FindPetsByStatus", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Finds Pets by tags Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// List<Pet> + public List FindPetsByTags (List tags) + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = FindPetsByTagsWithHttpInfo(tags); + return localVarResponse.Data; + } + + /// + /// Finds Pets by tags Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// ApiResponse of List<Pet> + public Org.OpenAPITools.Client.ApiResponse< List > FindPetsByTagsWithHttpInfo (List tags) + { + // verify the required parameter 'tags' is set + if (tags == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'tags' when calling PetApi->FindPetsByTags"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (tags != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "tags", tags)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Get< List >("/pet/findByTags", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FindPetsByTags", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Finds Pets by tags Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// Task of List<Pet> + public async System.Threading.Tasks.Task> FindPetsByTagsAsync (List tags) + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = await FindPetsByTagsAsyncWithHttpInfo(tags); + return localVarResponse.Data; + + } + + /// + /// Finds Pets by tags Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Thrown when fails to make API call + /// Tags to filter by + /// Task of ApiResponse (List<Pet>) + public async System.Threading.Tasks.Task>> FindPetsByTagsAsyncWithHttpInfo (List tags) + { + // verify the required parameter 'tags' is set + if (tags == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'tags' when calling PetApi->FindPetsByTags"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (tags != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("csv", "tags", tags)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync>("/pet/findByTags", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("FindPetsByTags", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Find pet by ID Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Pet + public Pet GetPetById (long? petId) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = GetPetByIdWithHttpInfo(petId); + return localVarResponse.Data; + } + + /// + /// Find pet by ID Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// ApiResponse of Pet + public Org.OpenAPITools.Client.ApiResponse< Pet > GetPetByIdWithHttpInfo (long? petId) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->GetPetById"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + + // authentication (api_key) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key"))) + { + requestOptions.HeaderParameters.Add("api_key", this.Configuration.GetApiKeyWithPrefix("api_key")); + } + + // make the HTTP request + + var response = this.Client.Get< Pet >("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetPetById", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Find pet by ID Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Task of Pet + public async System.Threading.Tasks.Task GetPetByIdAsync (long? petId) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await GetPetByIdAsyncWithHttpInfo(petId); + return localVarResponse.Data; + + } + + /// + /// Find pet by ID Returns a single pet + /// + /// Thrown when fails to make API call + /// ID of pet to return + /// Task of ApiResponse (Pet) + public async System.Threading.Tasks.Task> GetPetByIdAsyncWithHttpInfo (long? petId) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->GetPetById"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + + // authentication (api_key) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key"))) + { + requestOptions.HeaderParameters.Add("api_key", this.Configuration.GetApiKeyWithPrefix("api_key")); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetPetById", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Update an existing pet + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// + public void UpdatePet (Pet pet) + { + UpdatePetWithHttpInfo(pet); + } + + /// + /// Update an existing pet + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse UpdatePetWithHttpInfo (Pet pet) + { + // verify the required parameter 'pet' is set + if (pet == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'pet' when calling PetApi->UpdatePet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json", + "application/xml" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = pet; + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Put("/pet", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdatePet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Update an existing pet + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of void + public async System.Threading.Tasks.Task UpdatePetAsync (Pet pet) + { + await UpdatePetAsyncWithHttpInfo(pet); + + } + + /// + /// Update an existing pet + /// + /// Thrown when fails to make API call + /// Pet object that needs to be added to the store + /// Task of ApiResponse + public async System.Threading.Tasks.Task> UpdatePetAsyncWithHttpInfo (Pet pet) + { + // verify the required parameter 'pet' is set + if (pet == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'pet' when calling PetApi->UpdatePet"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/json", + "application/xml" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = pet; + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PutAsync("/pet", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdatePet", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Updates a pet in the store with form data + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// + public void UpdatePetWithForm (long? petId, string name = null, string status = null) + { + UpdatePetWithFormWithHttpInfo(petId, name, status); + } + + /// + /// Updates a pet in the store with form data + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse UpdatePetWithFormWithHttpInfo (long? petId, string name = null, string status = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UpdatePetWithForm"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (name != null) + { + requestOptions.FormParameters.Add("name", Org.OpenAPITools.Client.ClientUtils.ParameterToString(name)); // form parameter + } + if (status != null) + { + requestOptions.FormParameters.Add("status", Org.OpenAPITools.Client.ClientUtils.ParameterToString(status)); // form parameter + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Post("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdatePetWithForm", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Updates a pet in the store with form data + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// Task of void + public async System.Threading.Tasks.Task UpdatePetWithFormAsync (long? petId, string name = null, string status = null) + { + await UpdatePetWithFormAsyncWithHttpInfo(petId, name, status); + + } + + /// + /// Updates a pet in the store with form data + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be updated + /// Updated name of the pet (optional) + /// Updated status of the pet (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> UpdatePetWithFormAsyncWithHttpInfo (long? petId, string name = null, string status = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UpdatePetWithForm"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (name != null) + { + requestOptions.FormParameters.Add("name", Org.OpenAPITools.Client.ClientUtils.ParameterToString(name)); // form parameter + } + if (status != null) + { + requestOptions.FormParameters.Add("status", Org.OpenAPITools.Client.ClientUtils.ParameterToString(status)); // form parameter + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/pet/{petId}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdatePetWithForm", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// uploads an image + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// ApiResponse + public ApiResponse UploadFile (long? petId, string additionalMetadata = null, System.IO.Stream file = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFileWithHttpInfo(petId, additionalMetadata, file); + return localVarResponse.Data; + } + + /// + /// uploads an image + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// ApiResponse of ApiResponse + public Org.OpenAPITools.Client.ApiResponse< ApiResponse > UploadFileWithHttpInfo (long? petId, string additionalMetadata = null, System.IO.Stream file = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UploadFile"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "multipart/form-data" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (additionalMetadata != null) + { + requestOptions.FormParameters.Add("additionalMetadata", Org.OpenAPITools.Client.ClientUtils.ParameterToString(additionalMetadata)); // form parameter + } + if (file != null) + { + requestOptions.FileParameters.Add("file", file); + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Post< ApiResponse >("/pet/{petId}/uploadImage", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UploadFile", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// uploads an image + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task UploadFileAsync (long? petId, string additionalMetadata = null, System.IO.Stream file = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFileAsyncWithHttpInfo(petId, additionalMetadata, file); + return localVarResponse.Data; + + } + + /// + /// uploads an image + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// Additional data to pass to server (optional) + /// file to upload (optional) + /// Task of ApiResponse (ApiResponse) + public async System.Threading.Tasks.Task> UploadFileAsyncWithHttpInfo (long? petId, string additionalMetadata = null, System.IO.Stream file = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UploadFile"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "multipart/form-data" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (additionalMetadata != null) + { + requestOptions.FormParameters.Add("additionalMetadata", Org.OpenAPITools.Client.ClientUtils.ParameterToString(additionalMetadata)); // form parameter + } + if (file != null) + { + requestOptions.FileParameters.Add("file", file); + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/pet/{petId}/uploadImage", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UploadFile", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// uploads an image (required) + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// ApiResponse + public ApiResponse UploadFileWithRequiredFile (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFileWithRequiredFileWithHttpInfo(petId, requiredFile, additionalMetadata); + return localVarResponse.Data; + } + + /// + /// uploads an image (required) + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// ApiResponse of ApiResponse + public Org.OpenAPITools.Client.ApiResponse< ApiResponse > UploadFileWithRequiredFileWithHttpInfo (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UploadFileWithRequiredFile"); + // verify the required parameter 'requiredFile' is set + if (requiredFile == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredFile' when calling PetApi->UploadFileWithRequiredFile"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "multipart/form-data" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (additionalMetadata != null) + { + requestOptions.FormParameters.Add("additionalMetadata", Org.OpenAPITools.Client.ClientUtils.ParameterToString(additionalMetadata)); // form parameter + } + if (requiredFile != null) + { + requestOptions.FileParameters.Add("requiredFile", requiredFile); + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = this.Client.Post< ApiResponse >("/fake/{petId}/uploadImageWithRequiredFile", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UploadFileWithRequiredFile", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// uploads an image (required) + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task UploadFileWithRequiredFileAsync (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFileWithRequiredFileAsyncWithHttpInfo(petId, requiredFile, additionalMetadata); + return localVarResponse.Data; + + } + + /// + /// uploads an image (required) + /// + /// Thrown when fails to make API call + /// ID of pet to update + /// file to upload + /// Additional data to pass to server (optional) + /// Task of ApiResponse (ApiResponse) + public async System.Threading.Tasks.Task> UploadFileWithRequiredFileAsyncWithHttpInfo (long? petId, System.IO.Stream requiredFile, string additionalMetadata = null) + { + // verify the required parameter 'petId' is set + if (petId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'petId' when calling PetApi->UploadFileWithRequiredFile"); + // verify the required parameter 'requiredFile' is set + if (requiredFile == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'requiredFile' when calling PetApi->UploadFileWithRequiredFile"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + "multipart/form-data" + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (petId != null) + requestOptions.PathParameters.Add("petId", Org.OpenAPITools.Client.ClientUtils.ParameterToString(petId)); // path parameter + if (additionalMetadata != null) + { + requestOptions.FormParameters.Add("additionalMetadata", Org.OpenAPITools.Client.ClientUtils.ParameterToString(additionalMetadata)); // form parameter + } + if (requiredFile != null) + { + requestOptions.FileParameters.Add("requiredFile", requiredFile); + } + + // authentication (petstore_auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + requestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/fake/{petId}/uploadImageWithRequiredFile", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UploadFileWithRequiredFile", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/StoreApi.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/StoreApi.cs new file mode 100644 index 0000000000..1cde4e7715 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/StoreApi.cs @@ -0,0 +1,775 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IStoreApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// + void DeleteOrder (string orderId); + + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// ApiResponse of Object(void) + ApiResponse DeleteOrderWithHttpInfo (string orderId); + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Dictionary<string, int?> + Dictionary GetInventory (); + + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// ApiResponse of Dictionary<string, int?> + ApiResponse> GetInventoryWithHttpInfo (); + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Order + Order GetOrderById (long? orderId); + + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// ApiResponse of Order + ApiResponse GetOrderByIdWithHttpInfo (long? orderId); + /// + /// Place an order for a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Order + Order PlaceOrder (Order order); + + /// + /// Place an order for a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// ApiResponse of Order + ApiResponse PlaceOrderWithHttpInfo (Order order); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IStoreApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// Task of void + System.Threading.Tasks.Task DeleteOrderAsync (string orderId); + + /// + /// Delete purchase order by ID + /// + /// + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// Task of ApiResponse + System.Threading.Tasks.Task> DeleteOrderAsyncWithHttpInfo (string orderId); + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Task of Dictionary<string, int?> + System.Threading.Tasks.Task> GetInventoryAsync (); + + /// + /// Returns pet inventories by status + /// + /// + /// Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (Dictionary<string, int?>) + System.Threading.Tasks.Task>> GetInventoryAsyncWithHttpInfo (); + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Task of Order + System.Threading.Tasks.Task GetOrderByIdAsync (long? orderId); + + /// + /// Find purchase order by ID + /// + /// + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Task of ApiResponse (Order) + System.Threading.Tasks.Task> GetOrderByIdAsyncWithHttpInfo (long? orderId); + /// + /// Place an order for a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Task of Order + System.Threading.Tasks.Task PlaceOrderAsync (Order order); + + /// + /// Place an order for a pet + /// + /// + /// + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Task of ApiResponse (Order) + System.Threading.Tasks.Task> PlaceOrderAsyncWithHttpInfo (Order order); + #endregion Asynchronous Operations + } + + public interface IStoreApi : IStoreApiSync, IStoreApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class StoreApi : IStoreApi + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public StoreApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public StoreApi(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public StoreApi(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public StoreApi(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// + public void DeleteOrder (string orderId) + { + DeleteOrderWithHttpInfo(orderId); + } + + /// + /// Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse DeleteOrderWithHttpInfo (string orderId) + { + // verify the required parameter 'orderId' is set + if (orderId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->DeleteOrder"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (orderId != null) + requestOptions.PathParameters.Add("order_id", Org.OpenAPITools.Client.ClientUtils.ParameterToString(orderId)); // path parameter + + + // make the HTTP request + + var response = this.Client.Delete("/store/order/{order_id}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeleteOrder", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// Task of void + public async System.Threading.Tasks.Task DeleteOrderAsync (string orderId) + { + await DeleteOrderAsyncWithHttpInfo(orderId); + + } + + /// + /// Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// + /// Thrown when fails to make API call + /// ID of the order that needs to be deleted + /// Task of ApiResponse + public async System.Threading.Tasks.Task> DeleteOrderAsyncWithHttpInfo (string orderId) + { + // verify the required parameter 'orderId' is set + if (orderId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->DeleteOrder"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (orderId != null) + requestOptions.PathParameters.Add("order_id", Org.OpenAPITools.Client.ClientUtils.ParameterToString(orderId)); // path parameter + + + // make the HTTP request + + var response = await this.AsynchronousClient.DeleteAsync("/store/order/{order_id}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeleteOrder", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Returns pet inventories by status Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Dictionary<string, int?> + public Dictionary GetInventory () + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = GetInventoryWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// Returns pet inventories by status Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// ApiResponse of Dictionary<string, int?> + public Org.OpenAPITools.Client.ApiResponse< Dictionary > GetInventoryWithHttpInfo () + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + + // authentication (api_key) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key"))) + { + requestOptions.HeaderParameters.Add("api_key", this.Configuration.GetApiKeyWithPrefix("api_key")); + } + + // make the HTTP request + + var response = this.Client.Get< Dictionary >("/store/inventory", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetInventory", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Returns pet inventories by status Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Task of Dictionary<string, int?> + public async System.Threading.Tasks.Task> GetInventoryAsync () + { + Org.OpenAPITools.Client.ApiResponse> localVarResponse = await GetInventoryAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// Returns pet inventories by status Returns a map of status codes to quantities + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (Dictionary<string, int?>) + public async System.Threading.Tasks.Task>> GetInventoryAsyncWithHttpInfo () + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + + // authentication (api_key) required + if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api_key"))) + { + requestOptions.HeaderParameters.Add("api_key", this.Configuration.GetApiKeyWithPrefix("api_key")); + } + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync>("/store/inventory", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetInventory", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Order + public Order GetOrderById (long? orderId) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = GetOrderByIdWithHttpInfo(orderId); + return localVarResponse.Data; + } + + /// + /// Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// ApiResponse of Order + public Org.OpenAPITools.Client.ApiResponse< Order > GetOrderByIdWithHttpInfo (long? orderId) + { + // verify the required parameter 'orderId' is set + if (orderId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->GetOrderById"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (orderId != null) + requestOptions.PathParameters.Add("order_id", Org.OpenAPITools.Client.ClientUtils.ParameterToString(orderId)); // path parameter + + + // make the HTTP request + + var response = this.Client.Get< Order >("/store/order/{order_id}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetOrderById", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Task of Order + public async System.Threading.Tasks.Task GetOrderByIdAsync (long? orderId) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await GetOrderByIdAsyncWithHttpInfo(orderId); + return localVarResponse.Data; + + } + + /// + /// Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// + /// Thrown when fails to make API call + /// ID of pet that needs to be fetched + /// Task of ApiResponse (Order) + public async System.Threading.Tasks.Task> GetOrderByIdAsyncWithHttpInfo (long? orderId) + { + // verify the required parameter 'orderId' is set + if (orderId == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'orderId' when calling StoreApi->GetOrderById"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (orderId != null) + requestOptions.PathParameters.Add("order_id", Org.OpenAPITools.Client.ClientUtils.ParameterToString(orderId)); // path parameter + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/store/order/{order_id}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetOrderById", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Place an order for a pet + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Order + public Order PlaceOrder (Order order) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = PlaceOrderWithHttpInfo(order); + return localVarResponse.Data; + } + + /// + /// Place an order for a pet + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// ApiResponse of Order + public Org.OpenAPITools.Client.ApiResponse< Order > PlaceOrderWithHttpInfo (Order order) + { + // verify the required parameter 'order' is set + if (order == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'order' when calling StoreApi->PlaceOrder"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = order; + + + // make the HTTP request + + var response = this.Client.Post< Order >("/store/order", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("PlaceOrder", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Place an order for a pet + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Task of Order + public async System.Threading.Tasks.Task PlaceOrderAsync (Order order) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await PlaceOrderAsyncWithHttpInfo(order); + return localVarResponse.Data; + + } + + /// + /// Place an order for a pet + /// + /// Thrown when fails to make API call + /// order placed for purchasing the pet + /// Task of ApiResponse (Order) + public async System.Threading.Tasks.Task> PlaceOrderAsyncWithHttpInfo (Order order) + { + // verify the required parameter 'order' is set + if (order == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'order' when calling StoreApi->PlaceOrder"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = order; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/store/order", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("PlaceOrder", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/UserApi.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/UserApi.cs new file mode 100644 index 0000000000..72f2b65717 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Api/UserApi.cs @@ -0,0 +1,1435 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Org.OpenAPITools.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IUserApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Create user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// + void CreateUser (User user); + + /// + /// Create user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// ApiResponse of Object(void) + ApiResponse CreateUserWithHttpInfo (User user); + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// + void CreateUsersWithArrayInput (List user); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// ApiResponse of Object(void) + ApiResponse CreateUsersWithArrayInputWithHttpInfo (List user); + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// + void CreateUsersWithListInput (List user); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// ApiResponse of Object(void) + ApiResponse CreateUsersWithListInputWithHttpInfo (List user); + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// + void DeleteUser (string username); + + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// ApiResponse of Object(void) + ApiResponse DeleteUserWithHttpInfo (string username); + /// + /// Get user by user name + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// User + User GetUserByName (string username); + + /// + /// Get user by user name + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// ApiResponse of User + ApiResponse GetUserByNameWithHttpInfo (string username); + /// + /// Logs user into the system + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// string + string LoginUser (string username, string password); + + /// + /// Logs user into the system + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// ApiResponse of string + ApiResponse LoginUserWithHttpInfo (string username, string password); + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// Thrown when fails to make API call + /// + void LogoutUser (); + + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// Thrown when fails to make API call + /// ApiResponse of Object(void) + ApiResponse LogoutUserWithHttpInfo (); + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// + void UpdateUser (string username, User user); + + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// ApiResponse of Object(void) + ApiResponse UpdateUserWithHttpInfo (string username, User user); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IUserApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Create user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// Task of void + System.Threading.Tasks.Task CreateUserAsync (User user); + + /// + /// Create user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// Task of ApiResponse + System.Threading.Tasks.Task> CreateUserAsyncWithHttpInfo (User user); + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of void + System.Threading.Tasks.Task CreateUsersWithArrayInputAsync (List user); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of ApiResponse + System.Threading.Tasks.Task> CreateUsersWithArrayInputAsyncWithHttpInfo (List user); + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of void + System.Threading.Tasks.Task CreateUsersWithListInputAsync (List user); + + /// + /// Creates list of users with given input array + /// + /// + /// + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of ApiResponse + System.Threading.Tasks.Task> CreateUsersWithListInputAsyncWithHttpInfo (List user); + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// Task of void + System.Threading.Tasks.Task DeleteUserAsync (string username); + + /// + /// Delete user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// Task of ApiResponse + System.Threading.Tasks.Task> DeleteUserAsyncWithHttpInfo (string username); + /// + /// Get user by user name + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// Task of User + System.Threading.Tasks.Task GetUserByNameAsync (string username); + + /// + /// Get user by user name + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// Task of ApiResponse (User) + System.Threading.Tasks.Task> GetUserByNameAsyncWithHttpInfo (string username); + /// + /// Logs user into the system + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// Task of string + System.Threading.Tasks.Task LoginUserAsync (string username, string password); + + /// + /// Logs user into the system + /// + /// + /// + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// Task of ApiResponse (string) + System.Threading.Tasks.Task> LoginUserAsyncWithHttpInfo (string username, string password); + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Task of void + System.Threading.Tasks.Task LogoutUserAsync (); + + /// + /// Logs out current logged in user session + /// + /// + /// + /// + /// Thrown when fails to make API call + /// Task of ApiResponse + System.Threading.Tasks.Task> LogoutUserAsyncWithHttpInfo (); + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// Task of void + System.Threading.Tasks.Task UpdateUserAsync (string username, User user); + + /// + /// Updated user + /// + /// + /// This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// Task of ApiResponse + System.Threading.Tasks.Task> UpdateUserAsyncWithHttpInfo (string username, User user); + #endregion Asynchronous Operations + } + + public interface IUserApi : IUserApiSync, IUserApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class UserApi : IUserApi + { + private Org.OpenAPITools.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public UserApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public UserApi(String basePath) + { + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + new Org.OpenAPITools.Client.Configuration { BasePath = basePath } + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public UserApi(Org.OpenAPITools.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( + Org.OpenAPITools.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Org.OpenAPITools.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public UserApi(Org.OpenAPITools.Client.ISynchronousClient client,Org.OpenAPITools.Client.IAsynchronousClient asyncClient, Org.OpenAPITools.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Org.OpenAPITools.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Org.OpenAPITools.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Org.OpenAPITools.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Org.OpenAPITools.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Create user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// + public void CreateUser (User user) + { + CreateUserWithHttpInfo(user); + } + + /// + /// Create user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse CreateUserWithHttpInfo (User user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = this.Client.Post("/user", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Create user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// Task of void + public async System.Threading.Tasks.Task CreateUserAsync (User user) + { + await CreateUserAsyncWithHttpInfo(user); + + } + + /// + /// Create user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// Created user object + /// Task of ApiResponse + public async System.Threading.Tasks.Task> CreateUserAsyncWithHttpInfo (User user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/user", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// + public void CreateUsersWithArrayInput (List user) + { + CreateUsersWithArrayInputWithHttpInfo(user); + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse CreateUsersWithArrayInputWithHttpInfo (List user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUsersWithArrayInput"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = this.Client.Post("/user/createWithArray", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUsersWithArrayInput", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of void + public async System.Threading.Tasks.Task CreateUsersWithArrayInputAsync (List user) + { + await CreateUsersWithArrayInputAsyncWithHttpInfo(user); + + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of ApiResponse + public async System.Threading.Tasks.Task> CreateUsersWithArrayInputAsyncWithHttpInfo (List user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUsersWithArrayInput"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/user/createWithArray", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUsersWithArrayInput", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// + public void CreateUsersWithListInput (List user) + { + CreateUsersWithListInputWithHttpInfo(user); + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse CreateUsersWithListInputWithHttpInfo (List user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUsersWithListInput"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = this.Client.Post("/user/createWithList", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUsersWithListInput", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of void + public async System.Threading.Tasks.Task CreateUsersWithListInputAsync (List user) + { + await CreateUsersWithListInputAsyncWithHttpInfo(user); + + } + + /// + /// Creates list of users with given input array + /// + /// Thrown when fails to make API call + /// List of user object + /// Task of ApiResponse + public async System.Threading.Tasks.Task> CreateUsersWithListInputAsyncWithHttpInfo (List user) + { + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->CreateUsersWithListInput"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + requestOptions.Data = user; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PostAsync("/user/createWithList", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("CreateUsersWithListInput", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Delete user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// + public void DeleteUser (string username) + { + DeleteUserWithHttpInfo(username); + } + + /// + /// Delete user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse DeleteUserWithHttpInfo (string username) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->DeleteUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + + + // make the HTTP request + + var response = this.Client.Delete("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeleteUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Delete user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// Task of void + public async System.Threading.Tasks.Task DeleteUserAsync (string username) + { + await DeleteUserAsyncWithHttpInfo(username); + + } + + /// + /// Delete user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// The name that needs to be deleted + /// Task of ApiResponse + public async System.Threading.Tasks.Task> DeleteUserAsyncWithHttpInfo (string username) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->DeleteUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + + + // make the HTTP request + + var response = await this.AsynchronousClient.DeleteAsync("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("DeleteUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Get user by user name + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// User + public User GetUserByName (string username) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = GetUserByNameWithHttpInfo(username); + return localVarResponse.Data; + } + + /// + /// Get user by user name + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// ApiResponse of User + public Org.OpenAPITools.Client.ApiResponse< User > GetUserByNameWithHttpInfo (string username) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->GetUserByName"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + + + // make the HTTP request + + var response = this.Client.Get< User >("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetUserByName", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Get user by user name + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// Task of User + public async System.Threading.Tasks.Task GetUserByNameAsync (string username) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await GetUserByNameAsyncWithHttpInfo(username); + return localVarResponse.Data; + + } + + /// + /// Get user by user name + /// + /// Thrown when fails to make API call + /// The name that needs to be fetched. Use user1 for testing. + /// Task of ApiResponse (User) + public async System.Threading.Tasks.Task> GetUserByNameAsyncWithHttpInfo (string username) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->GetUserByName"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("GetUserByName", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Logs user into the system + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// string + public string LoginUser (string username, string password) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = LoginUserWithHttpInfo(username, password); + return localVarResponse.Data; + } + + /// + /// Logs user into the system + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// ApiResponse of string + public Org.OpenAPITools.Client.ApiResponse< string > LoginUserWithHttpInfo (string username, string password) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->LoginUser"); + // verify the required parameter 'password' is set + if (password == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'password' when calling UserApi->LoginUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "username", username)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (password != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "password", password)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + + // make the HTTP request + + var response = this.Client.Get< string >("/user/login", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("LoginUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Logs user into the system + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// Task of string + public async System.Threading.Tasks.Task LoginUserAsync (string username, string password) + { + Org.OpenAPITools.Client.ApiResponse localVarResponse = await LoginUserAsyncWithHttpInfo(username, password); + return localVarResponse.Data; + + } + + /// + /// Logs user into the system + /// + /// Thrown when fails to make API call + /// The user name for login + /// The password for login in clear text + /// Task of ApiResponse (string) + public async System.Threading.Tasks.Task> LoginUserAsyncWithHttpInfo (string username, string password) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->LoginUser"); + // verify the required parameter 'password' is set + if (password == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'password' when calling UserApi->LoginUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + "application/xml", + "application/json" + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "username", username)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + if (password != null) + { + foreach (var kvp in Org.OpenAPITools.Client.ClientUtils.ParameterToMultiMap("", "password", password)) + { + foreach (var value in kvp.Value) + { + requestOptions.QueryParameters.Add(kvp.Key, value); + } + } + } + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/user/login", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("LoginUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Logs out current logged in user session + /// + /// Thrown when fails to make API call + /// + public void LogoutUser () + { + LogoutUserWithHttpInfo(); + } + + /// + /// Logs out current logged in user session + /// + /// Thrown when fails to make API call + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse LogoutUserWithHttpInfo () + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + + + // make the HTTP request + + var response = this.Client.Get("/user/logout", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("LogoutUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Logs out current logged in user session + /// + /// Thrown when fails to make API call + /// Task of void + public async System.Threading.Tasks.Task LogoutUserAsync () + { + await LogoutUserAsyncWithHttpInfo(); + + } + + /// + /// Logs out current logged in user session + /// + /// Thrown when fails to make API call + /// Task of ApiResponse + public async System.Threading.Tasks.Task> LogoutUserAsyncWithHttpInfo () + { + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + + + // make the HTTP request + + var response = await this.AsynchronousClient.GetAsync("/user/logout", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("LogoutUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Updated user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// + public void UpdateUser (string username, User user) + { + UpdateUserWithHttpInfo(username, user); + } + + /// + /// Updated user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// ApiResponse of Object(void) + public Org.OpenAPITools.Client.ApiResponse UpdateUserWithHttpInfo (string username, User user) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->UpdateUser"); + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->UpdateUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + requestOptions.Data = user; + + + // make the HTTP request + + var response = this.Client.Put("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdateUser", response); + if (exception != null) throw exception; + } + + return response; + } + + /// + /// Updated user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// Task of void + public async System.Threading.Tasks.Task UpdateUserAsync (string username, User user) + { + await UpdateUserAsyncWithHttpInfo(username, user); + + } + + /// + /// Updated user This can only be done by the logged in user. + /// + /// Thrown when fails to make API call + /// name that need to be deleted + /// Updated user object + /// Task of ApiResponse + public async System.Threading.Tasks.Task> UpdateUserAsyncWithHttpInfo (string username, User user) + { + // verify the required parameter 'username' is set + if (username == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'username' when calling UserApi->UpdateUser"); + // verify the required parameter 'user' is set + if (user == null) + throw new Org.OpenAPITools.Client.ApiException(400, "Missing required parameter 'user' when calling UserApi->UpdateUser"); + + Org.OpenAPITools.Client.RequestOptions requestOptions = new Org.OpenAPITools.Client.RequestOptions(); + + String[] @contentTypes = new String[] { + }; + + // to determine the Accept header + String[] @accepts = new String[] { + }; + + foreach (var contentType in @contentTypes) + requestOptions.HeaderParameters.Add("Content-Type", contentType); + + foreach (var accept in @accepts) + requestOptions.HeaderParameters.Add("Accept", accept); + + if (username != null) + requestOptions.PathParameters.Add("username", Org.OpenAPITools.Client.ClientUtils.ParameterToString(username)); // path parameter + requestOptions.Data = user; + + + // make the HTTP request + + var response = await this.AsynchronousClient.PutAsync("/user/{username}", requestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception exception = this.ExceptionFactory("UpdateUser", response); + if (exception != null) throw exception; + } + + return response; + } + + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs new file mode 100644 index 0000000000..6e226c0cd8 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -0,0 +1,503 @@ +/* + * 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 System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.IO; +using System.Web; +using System.Linq; +using System.Net; +using System.Text; +using Newtonsoft.Json; +using RestSharp; +using RestSharpMethod = RestSharp.Method; + +namespace Org.OpenAPITools.Client +{ + /// + /// Allows RestSharp to Serialize/Deserialize JSON using our custom logic, but only when ContentType is JSON. + /// + internal class CustomJsonCodec : RestSharp.Serializers.ISerializer, RestSharp.Deserializers.IDeserializer + { + private readonly IReadableConfiguration _configuration; + private readonly JsonSerializer _serializer; + private string _contentType = "application/json"; + private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings + { + // Swagger generated types generally hide default constructors. + ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor + }; + + public CustomJsonCodec(IReadableConfiguration configuration) + { + _configuration = configuration; + _serializer = JsonSerializer.Create(_serializerSettings); + } + + public CustomJsonCodec(JsonSerializerSettings serializerSettings, IReadableConfiguration configuration) + { + _serializerSettings = serializerSettings; + _serializer = JsonSerializer.Create(_serializerSettings); + _configuration = configuration; + } + + public string Serialize(object obj) + { + using (var writer = new StringWriter()) + using (var jsonWriter = new JsonTextWriter(writer) + { + Formatting = Formatting.None, + DateFormatString = _configuration.DateTimeFormat + }) + { + _serializer.Serialize(jsonWriter, obj); + return writer.ToString(); + } + } + + public T Deserialize(IRestResponse response) + { + return (T) Deserialize(response, typeof(T)); + } + + /// + /// Deserialize the JSON string into a proper object. + /// + /// The HTTP response. + /// Object type. + /// Object representation of the JSON string. + internal object Deserialize(IRestResponse response, Type type) + { + IList headers = response.Headers; + if (type == typeof(byte[])) // return byte array + { + return response.RawBytes; + } + + // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) + if (type == typeof(Stream)) + { + if (headers != null) + { + var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) + ? Path.GetTempPath() + : _configuration.TempFolderPath; + var regex = new Regex(@"Content-Disposition=.*filename=['""]?([^'""\s]+)['""]?$"); + foreach (var header in headers) + { + var match = regex.Match(header.ToString()); + if (match.Success) + { + string fileName = filePath + ClientUtils.SanitizeFilename(match.Groups[1].Value.Replace("\"", "").Replace("'", "")); + File.WriteAllBytes(fileName, response.RawBytes); + return new FileStream(fileName, FileMode.Open); + } + } + } + var stream = new MemoryStream(response.RawBytes); + return stream; + } + + if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object + { + return DateTime.Parse(response.Content, null, System.Globalization.DateTimeStyles.RoundtripKind); + } + + if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type + { + return ClientUtils.ConvertType(response.Content, type); + } + + // at this point, it must be a model (json) + try + { + return JsonConvert.DeserializeObject(response.Content, type, _serializerSettings); + } + catch (Exception e) + { + throw new ApiException(500, e.Message); + } + } + + public string RootElement { get; set; } + public string Namespace { get; set; } + public string DateFormat { get; set; } + + public string ContentType + { + get { return _contentType; } + set { throw new InvalidOperationException("Not allowed to set content type."); } + } + } + /// + /// Provides a default implementation of an Api client (both synchronous and asynchronous implementatios), + /// encapsulating general REST accessor use cases. + /// + public partial class ApiClient : ISynchronousClient, IAsynchronousClient + { + private readonly String _baseUrl; + + /// + /// Allows for extending request processing for generated code. + /// + /// The RestSharp request object + partial void InterceptRequest(IRestRequest request); + + /// + /// Allows for extending response processing for generated code. + /// + /// The RestSharp request object + /// The RestSharp response object + partial void InterceptResponse(IRestRequest request, IRestResponse response); + + /// + /// Initializes a new instance of the , defaulting to the global configurations' base url. + /// + public ApiClient() + { + _baseUrl = Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath; + } + + /// + /// Initializes a new instance of the + /// + /// The target service's base path in URL format. + /// + public ApiClient(String basePath) + { + if (String.IsNullOrEmpty(basePath)) + throw new ArgumentException("basePath cannot be empty"); + + _baseUrl = basePath; + } + + /// + /// Constructs the RestSharp version of an http method + /// + /// Swagger Client Custom HttpMethod + /// RestSharp's HttpMethod instance. + /// + private RestSharpMethod Method(HttpMethod method) + { + RestSharpMethod other; + switch (method) + { + case HttpMethod.Get: + other = RestSharpMethod.GET; + break; + case HttpMethod.Post: + other = RestSharpMethod.POST; + break; + case HttpMethod.Put: + other = RestSharpMethod.PUT; + break; + case HttpMethod.Delete: + other = RestSharpMethod.DELETE; + break; + case HttpMethod.Head: + other = RestSharpMethod.HEAD; + break; + case HttpMethod.Options: + other = RestSharpMethod.OPTIONS; + break; + case HttpMethod.Patch: + other = RestSharpMethod.PATCH; + break; + default: + throw new ArgumentOutOfRangeException("method", method, null); + } + + return other; + } + + /// + /// Provides all logic for constructing a new RestSharp . + /// At this point, all information for querying the service is known. Here, it is simply + /// mapped into the RestSharp request. + /// + /// The http verb. + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// [private] A new RestRequest instance. + /// + private RestRequest newRequest( + HttpMethod method, + String path, + RequestOptions options, + IReadableConfiguration configuration) + { + if (path == null) throw new ArgumentNullException("path"); + if (options == null) throw new ArgumentNullException("options"); + if (configuration == null) throw new ArgumentNullException("configuration"); + + RestRequest request = new RestRequest(path, Method(method)); + + if (options.PathParameters != null) + { + foreach (var pathParam in options.PathParameters) + { + request.AddParameter(pathParam.Key, pathParam.Value, ParameterType.UrlSegment); + } + } + + if (options.QueryParameters != null) + { + foreach (var queryParam in options.QueryParameters) + { + foreach (var value in queryParam.Value) + { + request.AddQueryParameter(queryParam.Key, value); + } + } + } + + if (options.HeaderParameters != null) + { + foreach (var headerParam in options.HeaderParameters) + { + foreach (var value in headerParam.Value) + { + request.AddHeader(headerParam.Key, value); + } + } + } + + if (options.FormParameters != null) + { + foreach (var formParam in options.FormParameters) + { + request.AddParameter(formParam.Key, formParam.Value); + } + } + + if (options.Data != null) + { + if (options.HeaderParameters != null) + { + var contentTypes = options.HeaderParameters["Content-Type"]; + if (contentTypes == null || contentTypes.Any(header => header.Contains("application/json"))) + { + request.RequestFormat = DataFormat.Json; + } + else + { + // TODO: Generated client user should add additional handlers. RestSharp only supports XML and JSON, with XML as default. + } + } + else + { + // Here, we'll assume JSON APIs are more common. XML can be forced by adding produces/consumes to openapi spec explicitly. + request.RequestFormat = DataFormat.Json; + } + + request.AddBody(options.Data); + } + + if (options.FileParameters != null) + { + foreach (var fileParam in options.FileParameters) + { + var bytes = ClientUtils.ReadAsBytes(fileParam.Value); + var fileStream = fileParam.Value as FileStream; + if (fileStream != null) + FileParameter.Create(fileParam.Key, bytes, System.IO.Path.GetFileName(fileStream.Name)); + else + FileParameter.Create(fileParam.Key, bytes, "no_file_name_provided"); + } + } + + if (options.Cookies != null && options.Cookies.Count > 0) + { + foreach (var cookie in options.Cookies) + { + request.AddCookie(cookie.Name, cookie.Value); + } + } + + return request; + } + + private ApiResponse toApiResponse(IRestResponse response) + { + T result = response.Data; + var transformed = new ApiResponse(response.StatusCode, new Multimap(), result) + { + ErrorText = response.ErrorMessage, + Cookies = new List() + }; + + if (response.Headers != null) + { + foreach (var responseHeader in response.Headers) + { + transformed.Headers.Add(responseHeader.Name, ClientUtils.ParameterToString(responseHeader.Value)); + } + } + + if (response.Cookies != null) + { + foreach (var responseCookies in response.Cookies) + { + transformed.Cookies.Add( + new Cookie( + responseCookies.Name, + responseCookies.Value, + responseCookies.Path, + responseCookies.Domain) + ); + } + } + + return transformed; + } + + private async Task> Exec(RestRequest req, IReadableConfiguration configuration) + { + RestClient client = new RestClient(_baseUrl); + + var codec = new CustomJsonCodec(configuration); + req.JsonSerializer = codec; + client.AddHandler(codec.ContentType, codec); + + client.Timeout = configuration.Timeout; + + if (configuration.UserAgent != null) + { + client.UserAgent = configuration.UserAgent; + } + + InterceptRequest(req); + var response = await client.ExecuteTaskAsync(req); + InterceptResponse(req, response); + + var result = toApiResponse(response); + if (response.ErrorMessage != null) + { + result.ErrorText = response.ErrorMessage; + } + + if (response.Cookies != null && response.Cookies.Count > 0) + { + if(result.Cookies == null) result.Cookies = new List(); + foreach (var restResponseCookie in response.Cookies) + { + var cookie = new Cookie( + restResponseCookie.Name, + restResponseCookie.Value, + restResponseCookie.Path, + restResponseCookie.Domain + ) + { + Comment = restResponseCookie.Comment, + CommentUri = restResponseCookie.CommentUri, + Discard = restResponseCookie.Discard, + Expired = restResponseCookie.Expired, + Expires = restResponseCookie.Expires, + HttpOnly = restResponseCookie.HttpOnly, + Port = restResponseCookie.Port, + Secure = restResponseCookie.Secure, + Version = restResponseCookie.Version + }; + + result.Cookies.Add(cookie); + } + } + return result; + } + + #region IAsynchronousClient + public async Task> GetAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Get, path, options, config), config); + } + + public async Task> PostAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Post, path, options, config), config); + } + + public async Task> PutAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Put, path, options, config), config); + } + + public async Task> DeleteAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Delete, path, options, config), config); + } + + public async Task> HeadAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Head, path, options, config), config); + } + + public async Task> OptionsAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Options, path, options, config), config); + } + + public async Task> PatchAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Patch, path, options, config), config); + } + #endregion IAsynchronousClient + + #region ISynchronousClient + public ApiResponse Get(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return GetAsync(path, options, configuration).Result; + } + + public ApiResponse Post(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PostAsync(path, options, configuration).Result; + } + + public ApiResponse Put(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PutAsync(path, options, configuration).Result; + } + + public ApiResponse Delete(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return DeleteAsync(path, options, configuration).Result; + } + + public ApiResponse Head(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return HeadAsync(path, options, configuration).Result; + } + + public ApiResponse Options(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return OptionsAsync(path, options, configuration).Result; + } + + public ApiResponse Patch(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PatchAsync(path, options, configuration).Result; + } + #endregion ISynchronousClient + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiException.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiException.cs new file mode 100644 index 0000000000..c419432a04 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiException.cs @@ -0,0 +1,61 @@ +/* + * 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 System; + +namespace Org.OpenAPITools.Client +{ + /// + /// API Exception + /// + public class ApiException : Exception + { + /// + /// Gets or sets the error code (HTTP status code) + /// + /// The error code (HTTP status code). + public int ErrorCode { get; set; } + + /// + /// Gets or sets the error content (body json object) + /// + /// The error content (Http response body). + public dynamic ErrorContent { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + public ApiException() {} + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + public ApiException(int errorCode, string message) : base(message) + { + this.ErrorCode = errorCode; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Error message. + /// Error content. + public ApiException(int errorCode, string message, dynamic errorContent = null) : base(message) + { + this.ErrorCode = errorCode; + this.ErrorContent = errorContent; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiResponse.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiResponse.cs new file mode 100644 index 0000000000..7d5adfe995 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ApiResponse.cs @@ -0,0 +1,137 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.Net; + +namespace Org.OpenAPITools.Client +{ + /// + /// Provides a non-generic contract for the ApiResponse wrapper. + /// + public interface IApiResponse + { + /// + /// The data type of + /// + Type ResponseType { get; } + + /// + /// The content of this response + /// + Object Content { get; } + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + Multimap Headers { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + List Cookies { get; set; } + } + + /// + /// API Response + /// + public class ApiResponse : IApiResponse + { + #region Properties + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + public HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + public Multimap Headers { get; } + + /// + /// Gets or sets the data (parsed HTTP body) + /// + /// The data. + public T Data { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + public String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + public List Cookies { get; set; } + + /// + /// The content of this response + /// + public Type ResponseType + { + get { return typeof(T); } + } + + /// + /// The data type of + /// + public object Content + { + get { return Data; } + } + + #endregion Properties + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// HTTP headers. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, Multimap headers, T data) + { + StatusCode = statusCode; + Headers = headers; + Data = data; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, T data) + { + StatusCode = statusCode; + Data = data; + } + + #endregion Constructors + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ClientUtils.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ClientUtils.cs new file mode 100644 index 0000000000..a4dcda0ba2 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ClientUtils.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Org.OpenAPITools.Client +{ + /// + /// Utility functions providing some benefit to API client consumers. + /// + public static class ClientUtils + { + /// + /// Sanitize filename by removing the path + /// + /// Filename + /// Filename + public static string SanitizeFilename(string filename) + { + Match match = Regex.Match(filename, @".*[/\\](.*)$"); + return match.Success ? match.Groups[1].Value : filename; + } + + /// + /// Convert params to key/value pairs. + /// Use collectionFormat to properly format lists and collections. + /// + /// The swagger-supported collection format, one of: csv, tsv, ssv, pipes, multi + /// Key name. + /// Value object. + /// A multimap of keys with 1..n associated values. + public static Multimap ParameterToMultiMap(string collectionFormat, string name, object value) + { + var parameters = new Multimap(); + + if (IsCollection(value) && collectionFormat == "multi") + { + var valueCollection = value as IEnumerable; + if (valueCollection != null) + { + foreach (var item in valueCollection) + { + parameters.Add(name, ParameterToString(item)); + } + } + } + else + { + parameters.Add(name, ParameterToString(value)); + } + + return parameters; + } + + /// + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. + /// If parameter is a list, join the list with ",". + /// Otherwise just return the string. + /// + /// The parameter (header, path, query, form). + /// An optional configuration instance, providing formatting options used in processing. + /// Formatted string. + public static string ParameterToString(object obj, IReadableConfiguration configuration = null) + { + if (obj is DateTime) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTime)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else if (obj is DateTimeOffset) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTimeOffset)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else + { + if (obj is IList) + { + var list = obj as IList; + var flattenedString = new StringBuilder(); + foreach (var param in list) + { + if (flattenedString.Length > 0) + flattenedString.Append(","); + flattenedString.Append(param); + } + return flattenedString.ToString(); + } + + return Convert.ToString (obj); + } + } + + /// + /// Check if generic object is a collection. + /// + /// + /// True if object is a collection type + private static bool IsCollection(object value) + { + return value is IList || value is ICollection; + } + + /// + /// URL encode a string + /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 + /// + /// String to be URL encoded + /// Byte array + public static string UrlEncode(string input) + { + const int maxLength = 32766; + + if (input == null) + { + throw new ArgumentNullException("input"); + } + + if (input.Length <= maxLength) + { + return Uri.EscapeDataString(input); + } + + StringBuilder sb = new StringBuilder(input.Length * 2); + int index = 0; + + while (index < input.Length) + { + int length = Math.Min(input.Length - index, maxLength); + string subString = input.Substring(index, length); + + sb.Append(Uri.EscapeDataString(subString)); + index += subString.Length; + } + + return sb.ToString(); + } + + /// + /// Encode string in base64 format. + /// + /// String to be encoded. + /// Encoded string. + public static string Base64Encode(string text) + { + return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); + } + + /// + /// Convert stream to byte array + /// + /// Input stream to be converted + /// Byte array + public static byte[] ReadAsBytes(Stream inputStream) + { + byte[] buf = new byte[16*1024]; + using (MemoryStream ms = new MemoryStream()) + { + int count; + while ((count = inputStream.Read(buf, 0, buf.Length)) > 0) + { + ms.Write(buf, 0, count); + } + return ms.ToArray(); + } + } + + /// + /// Dynamically cast the object into target type. + /// + /// Object to be casted + /// Target type + /// Casted object + public static dynamic ConvertType(dynamic fromObject, Type toObject) + { + return Convert.ChangeType(fromObject, toObject); +} + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Configuration.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Configuration.cs new file mode 100644 index 0000000000..461a43dc01 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Configuration.cs @@ -0,0 +1,395 @@ +/* + * 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 System; +using System.Reflection; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace Org.OpenAPITools.Client +{ + /// + /// Represents a set of configuration settings + /// + public class Configuration : IReadableConfiguration + { + #region Constants + + /// + /// Version of the package. + /// + /// Version of the package. + public const string Version = "1.0.0"; + + /// + /// Identifier for ISO 8601 DateTime Format + /// + /// See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information. + // ReSharper disable once InconsistentNaming + public const string ISO8601_DATETIME_FORMAT = "o"; + + #endregion Constants + + #region Static Members + + /// + /// Default creation of exceptions for a given method name and response object + /// + public static readonly ExceptionFactory DefaultExceptionFactory = (methodName, response) => + { + var status = (int)response.StatusCode; + if (status >= 400) + { + return new ApiException(status, + string.Format("Error calling {0}: {1}", methodName, response.Content), + response.Content); + } + if (status == 0) + { + return new ApiException(status, + string.Format("Error calling {0}: {1}", methodName, response.ErrorText), response.ErrorText); + } + return null; + }; + + #endregion Static Members + + #region Private Members + + /// + /// Defines the base path of the target API server. + /// Example: http://localhost:3000/v1/ + /// + private String _basePath; + + /// + /// Gets or sets the API key based on the authentication name. + /// This is the key and value comprising the "secret" for acessing an API. + /// + /// The API key. + private IDictionary _apiKey; + + /// + /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// The prefix of the API key. + private IDictionary _apiKeyPrefix; + + private string _dateTimeFormat = ISO8601_DATETIME_FORMAT; + private string _tempFolderPath = Path.GetTempPath(); + + #endregion Private Members + + #region Constructors + + /// + /// Initializes a new instance of the class + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] + public Configuration() + { + UserAgent = "OpenAPI-Generator/1.0.0/csharp"; + BasePath = "http://petstore.swagger.io:80/v2"; + DefaultHeader = new ConcurrentDictionary(); + ApiKey = new ConcurrentDictionary(); + ApiKeyPrefix = new ConcurrentDictionary(); + + // Setting Timeout has side effects (forces ApiClient creation). + Timeout = 100000; + } + + /// + /// Initializes a new instance of the class + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] + public Configuration( + IDictionary defaultHeader, + IDictionary apiKey, + IDictionary apiKeyPrefix, + string basePath = "http://petstore.swagger.io:80/v2") : this() + { + if (string.IsNullOrWhiteSpace(basePath)) + throw new ArgumentException("The provided basePath is invalid.", "basePath"); + if (defaultHeader == null) + throw new ArgumentNullException("defaultHeader"); + if (apiKey == null) + throw new ArgumentNullException("apiKey"); + if (apiKeyPrefix == null) + throw new ArgumentNullException("apiKeyPrefix"); + + BasePath = basePath; + + foreach (var keyValuePair in defaultHeader) + { + DefaultHeader.Add(keyValuePair); + } + + foreach (var keyValuePair in apiKey) + { + ApiKey.Add(keyValuePair); + } + + foreach (var keyValuePair in apiKeyPrefix) + { + ApiKeyPrefix.Add(keyValuePair); + } + } + + #endregion Constructors + + #region Properties + + /// + /// Gets or sets the base path for API access. + /// + public virtual string BasePath { + get { return _basePath; } + set { + _basePath = value; + } + } + + /// + /// Gets or sets the default header. + /// + public virtual IDictionary DefaultHeader { get; set; } + + /// + /// Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds. + /// + public virtual int Timeout { get; set; } + + /// + /// Gets or sets the HTTP user agent. + /// + /// Http user agent. + public virtual string UserAgent { get; set; } + + /// + /// Gets or sets the username (HTTP basic authentication). + /// + /// The username. + public virtual string Username { get; set; } + + /// + /// Gets or sets the password (HTTP basic authentication). + /// + /// The password. + public virtual string Password { get; set; } + + /// + /// Gets the API key with prefix. + /// + /// API key identifier (authentication scheme). + /// API key with prefix. + public string GetApiKeyWithPrefix(string apiKeyIdentifier) + { + string apiKeyValue; + ApiKey.TryGetValue (apiKeyIdentifier, out apiKeyValue); + string apiKeyPrefix; + if (ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix)) + { + return apiKeyPrefix + " " + apiKeyValue; + } + + return apiKeyValue; + } + + /// + /// Gets or sets the access token for OAuth2 authentication. + /// + /// This helper property simplifies code generation. + /// + /// The access token. + public virtual string AccessToken { get; set; } + + /// + /// Gets or sets the temporary folder path to store the files downloaded from the server. + /// + /// Folder path. + public virtual string TempFolderPath + { + get { return _tempFolderPath; } + + set + { + if (string.IsNullOrEmpty(value)) + { + _tempFolderPath = Path.GetTempPath(); + return; + } + + // create the directory if it does not exist + if (!Directory.Exists(value)) + { + Directory.CreateDirectory(value); + } + + // check if the path contains directory separator at the end + if (value[value.Length - 1] == Path.DirectorySeparatorChar) + { + _tempFolderPath = value; + } + else + { + _tempFolderPath = value + Path.DirectorySeparatorChar; + } + } + } + + /// + /// Gets or sets the the date time format used when serializing in the ApiClient + /// By default, it's set to ISO 8601 - "o", for others see: + /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + /// No validation is done to ensure that the string you're providing is valid + /// + /// The DateTimeFormat string + public virtual string DateTimeFormat + { + get { return _dateTimeFormat; } + set + { + if (string.IsNullOrEmpty(value)) + { + // Never allow a blank or null string, go back to the default + _dateTimeFormat = ISO8601_DATETIME_FORMAT; + return; + } + + // Caution, no validation when you choose date time format other than ISO 8601 + // Take a look at the above links + _dateTimeFormat = value; + } + } + + /// + /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// Whatever you set here will be prepended to the value defined in AddApiKey. + /// + /// An example invocation here might be: + /// + /// ApiKeyPrefix["Authorization"] = "Bearer"; + /// + /// … where ApiKey["Authorization"] would then be used to set the value of your bearer token. + /// + /// + /// OAuth2 workflows should set tokens via AccessToken. + /// + /// + /// The prefix of the API key. + public virtual IDictionary ApiKeyPrefix + { + get { return _apiKeyPrefix; } + set + { + if (value == null) + { + throw new InvalidOperationException("ApiKeyPrefix collection may not be null."); + } + _apiKeyPrefix = value; + } + } + + /// + /// Gets or sets the API key based on the authentication name. + /// + /// The API key. + public virtual IDictionary ApiKey + { + get { return _apiKey; } + set + { + if (value == null) + { + throw new InvalidOperationException("ApiKey collection may not be null."); + } + _apiKey = value; + } + } + + #endregion Properties + + #region Methods + + /// + /// Returns a string with essential information for debugging. + /// + public static String ToDebugReport() + { + String report = "C# SDK (Org.OpenAPITools) Debug Report:\n"; + report += " OS: " + System.Environment.OSVersion + "\n"; + report += " .NET Framework Version: " + System.Environment.Version + "\n"; + report += " Version of the API: 1.0.0\n"; + report += " SDK Package Version: 1.0.0\n"; + + return report; + } + + /// + /// Add Api Key Header. + /// + /// Api Key name. + /// Api Key value. + /// + public void AddApiKey(string key, string value) + { + ApiKey[key] = value; + } + + /// + /// Sets the API key prefix. + /// + /// Api Key name. + /// Api Key value. + public void AddApiKeyPrefix(string key, string value) + { + ApiKeyPrefix[key] = value; + } + + #endregion Methods + + #region Static Members + public static IReadableConfiguration MergeConfigurations(IReadableConfiguration first, IReadableConfiguration second) + { + if (second == null) return first ?? GlobalConfiguration.Instance; + + Dictionary apiKey = first.ApiKey.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary apiKeyPrefix = first.ApiKeyPrefix.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary defaultHeader = first.DefaultHeader.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + + foreach (var kvp in second.ApiKey) apiKey[kvp.Key] = kvp.Value; + foreach (var kvp in second.ApiKeyPrefix) apiKeyPrefix[kvp.Key] = kvp.Value; + foreach (var kvp in second.DefaultHeader) defaultHeader[kvp.Key] = kvp.Value; + + var config = new Configuration + { + ApiKey = apiKey, + ApiKeyPrefix = apiKeyPrefix, + DefaultHeader = defaultHeader, + BasePath = second.BasePath ?? first.BasePath, + Timeout = second.Timeout, + UserAgent = second.UserAgent ?? first.UserAgent, + Username = second.Username ?? first.Username, + Password = second.Password ?? first.Password, + AccessToken = second.AccessToken ?? first.AccessToken, + TempFolderPath = second.TempFolderPath ?? first.TempFolderPath, + DateTimeFormat = second.DateTimeFormat ?? first.DateTimeFormat + }; + return config; + } + #endregion Static Members + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ExceptionFactory.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ExceptionFactory.cs new file mode 100644 index 0000000000..6969e6cd32 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ExceptionFactory.cs @@ -0,0 +1,23 @@ +/* + * 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 System; + +namespace Org.OpenAPITools.Client +{ + /// + /// A delegate to ExceptionFactory method + /// + /// Method name + /// Response + /// Exceptions + public delegate Exception ExceptionFactory(string methodName, IApiResponse response); +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/GlobalConfiguration.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/GlobalConfiguration.cs new file mode 100644 index 0000000000..3e118b15fa --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/GlobalConfiguration.cs @@ -0,0 +1,68 @@ +/* + * 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 System.Collections.Generic; + +namespace Org.OpenAPITools.Client +{ + /// + /// provides a compile-time extension point for globally configuring + /// API Clients. + /// + /// + /// A customized implementation via partial class may reside in another file and may + /// be excluded from automatic generation via a .openapi-generator-ignore file. + /// + public partial class GlobalConfiguration : Configuration + { + #region Private Members + + private static readonly object GlobalConfigSync = new { }; + private static IReadableConfiguration _globalConfiguration; + + #endregion Private Members + + #region Constructors + + /// + private GlobalConfiguration() + { + } + + /// + public GlobalConfiguration(IDictionary defaultHeader, IDictionary apiKey, IDictionary apiKeyPrefix, string basePath = "http://localhost:3000/api") : base(defaultHeader, apiKey, apiKeyPrefix, basePath) + { + } + + static GlobalConfiguration() + { + Instance = new GlobalConfiguration(); + } + + #endregion Constructors + + /// + /// Gets or sets the default Configuration. + /// + /// Configuration. + public static IReadableConfiguration Instance + { + get { return _globalConfiguration; } + set + { + lock (GlobalConfigSync) + { + _globalConfiguration = value; + } + } + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/HttpMethod.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/HttpMethod.cs new file mode 100644 index 0000000000..8efb98403b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/HttpMethod.cs @@ -0,0 +1,27 @@ +/* + * 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 + */ + + +namespace Org.OpenAPITools.Client +{ + /// + /// Http methods supported by swagger + /// + public enum HttpMethod + { + Get, + Post, + Put, + Delete, + Head, + Options, + Patch + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IApiAccessor.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IApiAccessor.cs new file mode 100644 index 0000000000..0fdb137c34 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IApiAccessor.cs @@ -0,0 +1,38 @@ +/* + * 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 System; + +namespace Org.OpenAPITools.Client +{ + /// + /// Represents configuration aspects required to interact with the API endpoints. + /// + public interface IApiAccessor + { + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + IReadableConfiguration Configuration {get; set;} + + /// + /// Gets the base path of the API client. + /// + /// The base path + String GetBasePath(); + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + ExceptionFactory ExceptionFactory { get; set; } + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IAsynchronousClient.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IAsynchronousClient.cs new file mode 100644 index 0000000000..fdd9f05c73 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IAsynchronousClient.cs @@ -0,0 +1,96 @@ +/* + * 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 System; +using System.Threading.Tasks; + +namespace Org.OpenAPITools.Client +{ + /// + /// Contract for Asynchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface IAsynchronousClient + { + /// + /// Executes a non-blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> GetAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PostAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PutAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> DeleteAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> HeadAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> OptionsAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PatchAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IReadableConfiguration.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IReadableConfiguration.cs new file mode 100644 index 0000000000..76a5f5124f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/IReadableConfiguration.cs @@ -0,0 +1,94 @@ +/* + * 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 System.Collections.Generic; + +namespace Org.OpenAPITools.Client +{ + /// + /// Represents a readable-only configuration contract. + /// + public interface IReadableConfiguration + { + /// + /// Gets the access token. + /// + /// Access token. + string AccessToken { get; } + + /// + /// Gets the API key. + /// + /// API key. + IDictionary ApiKey { get; } + + /// + /// Gets the API key prefix. + /// + /// API key prefix. + IDictionary ApiKeyPrefix { get; } + + /// + /// Gets the base path. + /// + /// Base path. + string BasePath { get; } + + /// + /// Gets the date time format. + /// + /// Date time foramt. + string DateTimeFormat { get; } + + /// + /// Gets the default header. + /// + /// Default header. + IDictionary DefaultHeader { get; } + + /// + /// Gets the temp folder path. + /// + /// Temp folder path. + string TempFolderPath { get; } + + /// + /// Gets the HTTP connection timeout (in milliseconds) + /// + /// HTTP connection timeout. + int Timeout { get; } + + /// + /// Gets the user agent. + /// + /// User agent. + string UserAgent { get; } + + /// + /// Gets the username. + /// + /// Username. + string Username { get; } + + /// + /// Gets the password. + /// + /// Password. + string Password { get; } + + /// + /// Gets the API key with prefix. + /// + /// API key identifier (authentication scheme). + /// API key with prefix. + string GetApiKeyWithPrefix(string apiKeyIdentifier); + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ISynchronousClient.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ISynchronousClient.cs new file mode 100644 index 0000000000..7b837ca506 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/ISynchronousClient.cs @@ -0,0 +1,94 @@ +/* + * 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 System; +using System.IO; + +namespace Org.OpenAPITools.Client +{ + /// + /// Contract for Synchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface ISynchronousClient + { + /// + /// Executes a blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Get(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Post(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Put(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Delete(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Head(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Options(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Patch(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs new file mode 100644 index 0000000000..38a73b0268 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/Multimap.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Org.OpenAPITools.Client +{ + /// + /// A dictionary in which one key has many associated values. + /// + /// The type of the key + /// The type of the value associated with the key. + public class Multimap : IDictionary> + { + #region Private Fields + + private readonly ConcurrentDictionary> _dictionary = + new ConcurrentDictionary>(); + + #endregion Private Fields + + #region Enumerators + + public IEnumerator>> GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + #endregion Enumerators + + #region Public Members + + public void Add(KeyValuePair> item) + { + if (!TryAdd(item.Key, item.Value)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + + public void Clear() + { + _dictionary.Clear(); + } + + public bool Contains(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + public void CopyTo(KeyValuePair>[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + public bool Remove(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + public int Count + { + get + { + return _dictionary.Count; + } + } + + public bool IsReadOnly + { + get + { + return false; + } + } + + public void Add(T key, IList value) + { + if (value != null && value.Count > 0) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + foreach (var k in value) list.Add(k); + } + else + { + list = new List(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + } + } + + public bool ContainsKey(T key) + { + return _dictionary.ContainsKey(key); + } + + public bool Remove(T key) + { + IList list; + return TryRemove(key, out list); + } + + public bool TryGetValue(T key, out IList value) + { + return _dictionary.TryGetValue(key, out value); + } + + public IList this[T key] + { + get + { + return _dictionary[key]; + } + set { _dictionary[key] = value; } + } + + public ICollection Keys + { + get + { + return _dictionary.Keys; + } + } + + public ICollection> Values + { + get + { + return _dictionary.Values; + } + } + + public void CopyTo(Array array, int index) + { + ((ICollection) _dictionary).CopyTo(array, index); + } + + public void Add(T key, TValue value) + { + if (value != null) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + list.Add(value); + } + else + { + list = new List(); + list.Add(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add value to Multimap."); + } + } + } + + #endregion Public Members + + #region Private Members + + /** + * Helper method to encapsulate generator differences between dictioary types. + */ + private bool TryRemove(T key, out IList value) + { + return _dictionary.TryRemove(key, out value); + + } + + /** + * Helper method to encapsulate generator differences between dictioary types. + */ + private bool TryAdd(T key, IList value) + { + return _dictionary.TryAdd(key, value); + } + #endregion Private Members + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/OpenAPIDateConverter.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/OpenAPIDateConverter.cs new file mode 100644 index 0000000000..4f5c219d5c --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/OpenAPIDateConverter.cs @@ -0,0 +1,30 @@ +/* + * 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 Newtonsoft.Json.Converters; + +namespace Org.OpenAPITools.Client +{ + /// + /// Formatter for 'date' openapi formats ss defined by full-date - RFC3339 + /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types + /// + public class OpenAPIDateConverter : IsoDateTimeConverter + { + /// + /// Initializes a new instance of the class. + /// + public OpenAPIDateConverter() + { + // full-date = date-fullyear "-" date-month "-" date-mday + DateTimeFormat = "yyyy-MM-dd"; + } + } +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/RequestOptions.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/RequestOptions.cs new file mode 100644 index 0000000000..3e7846f24e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Client/RequestOptions.cs @@ -0,0 +1,75 @@ +/* + * 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 System; +using System.Collections.Generic; +using System.IO; +using System.Net; + +namespace Org.OpenAPITools.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/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs new file mode 100644 index 0000000000..59c2d5d047 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs @@ -0,0 +1,141 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// AdditionalPropertiesClass + /// + [DataContract] + public partial class AdditionalPropertiesClass : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// mapProperty. + /// mapOfMapProperty. + public AdditionalPropertiesClass(Dictionary mapProperty = default(Dictionary), Dictionary> mapOfMapProperty = default(Dictionary>)) + { + this.MapProperty = mapProperty; + this.MapOfMapProperty = mapOfMapProperty; + } + + /// + /// Gets or Sets MapProperty + /// + [DataMember(Name="map_property", EmitDefaultValue=false)] + public Dictionary MapProperty { get; set; } + + /// + /// Gets or Sets MapOfMapProperty + /// + [DataMember(Name="map_of_map_property", EmitDefaultValue=false)] + public Dictionary> MapOfMapProperty { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class AdditionalPropertiesClass {\n"); + sb.Append(" MapProperty: ").Append(MapProperty).Append("\n"); + sb.Append(" MapOfMapProperty: ").Append(MapOfMapProperty).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as AdditionalPropertiesClass); + } + + /// + /// Returns true if AdditionalPropertiesClass instances are equal + /// + /// Instance of AdditionalPropertiesClass to be compared + /// Boolean + public bool Equals(AdditionalPropertiesClass input) + { + if (input == null) + return false; + + return + ( + this.MapProperty == input.MapProperty || + this.MapProperty != null && + this.MapProperty.SequenceEqual(input.MapProperty) + ) && + ( + this.MapOfMapProperty == input.MapOfMapProperty || + this.MapOfMapProperty != null && + this.MapOfMapProperty.SequenceEqual(input.MapOfMapProperty) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.MapProperty != null) + hashCode = hashCode * 59 + this.MapProperty.GetHashCode(); + if (this.MapOfMapProperty != null) + hashCode = hashCode * 59 + this.MapOfMapProperty.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Animal.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Animal.cs new file mode 100644 index 0000000000..ad48639ccb --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Animal.cs @@ -0,0 +1,176 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using JsonSubTypes; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Animal + /// + [DataContract] + [JsonConverter(typeof(JsonSubtypes), "className")] + [JsonSubtypes.KnownSubType(typeof(Dog), "Dog")] + [JsonSubtypes.KnownSubType(typeof(Cat), "Cat")] + public partial class Animal : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Animal() { } + /// + /// Initializes a new instance of the class. + /// + /// className (required). + /// color (default to "red"). + public Animal(string className = default(string), string color = "red") + { + // to ensure "className" is required (not null) + if (className == null) + { + throw new InvalidDataException("className is a required property for Animal and cannot be null"); + } + else + { + this.ClassName = className; + } + // use default value if no "color" provided + if (color == null) + { + this.Color = "red"; + } + else + { + this.Color = color; + } + } + + /// + /// Gets or Sets ClassName + /// + [DataMember(Name="className", EmitDefaultValue=false)] + public string ClassName { get; set; } + + /// + /// Gets or Sets Color + /// + [DataMember(Name="color", EmitDefaultValue=false)] + public string Color { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Animal {\n"); + sb.Append(" ClassName: ").Append(ClassName).Append("\n"); + sb.Append(" Color: ").Append(Color).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Animal); + } + + /// + /// Returns true if Animal instances are equal + /// + /// Instance of Animal to be compared + /// Boolean + public bool Equals(Animal input) + { + if (input == null) + return false; + + return + ( + this.ClassName == input.ClassName || + (this.ClassName != null && + this.ClassName.Equals(input.ClassName)) + ) && + ( + this.Color == input.Color || + (this.Color != null && + this.Color.Equals(input.Color)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.ClassName != null) + hashCode = hashCode * 59 + this.ClassName.GetHashCode(); + if (this.Color != null) + hashCode = hashCode * 59 + this.Color.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + return this.BaseValidate(validationContext); + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + protected IEnumerable BaseValidate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AnimalFarm.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AnimalFarm.cs new file mode 100644 index 0000000000..b4ebc8d959 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/AnimalFarm.cs @@ -0,0 +1,111 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// AnimalFarm + /// + [DataContract] + public partial class AnimalFarm : List, IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + public AnimalFarm() : base() + { + } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class AnimalFarm {\n"); + sb.Append(" ").Append(base.ToString().Replace("\n", "\n ")).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as AnimalFarm); + } + + /// + /// Returns true if AnimalFarm instances are equal + /// + /// Instance of AnimalFarm to be compared + /// Boolean + public bool Equals(AnimalFarm input) + { + if (input == null) + return false; + + return base.Equals(input); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = base.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ApiResponse.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ApiResponse.cs new file mode 100644 index 0000000000..e5708098f2 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ApiResponse.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ApiResponse + /// + [DataContract] + public partial class ApiResponse : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// code. + /// type. + /// message. + public ApiResponse(int? code = default(int?), string type = default(string), string message = default(string)) + { + this.Code = code; + this.Type = type; + this.Message = message; + } + + /// + /// Gets or Sets Code + /// + [DataMember(Name="code", EmitDefaultValue=false)] + public int? Code { get; set; } + + /// + /// Gets or Sets Type + /// + [DataMember(Name="type", EmitDefaultValue=false)] + public string Type { get; set; } + + /// + /// Gets or Sets Message + /// + [DataMember(Name="message", EmitDefaultValue=false)] + public string Message { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ApiResponse {\n"); + sb.Append(" Code: ").Append(Code).Append("\n"); + sb.Append(" Type: ").Append(Type).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ApiResponse); + } + + /// + /// Returns true if ApiResponse instances are equal + /// + /// Instance of ApiResponse to be compared + /// Boolean + public bool Equals(ApiResponse input) + { + if (input == null) + return false; + + return + ( + this.Code == input.Code || + (this.Code != null && + this.Code.Equals(input.Code)) + ) && + ( + this.Type == input.Type || + (this.Type != null && + this.Type.Equals(input.Type)) + ) && + ( + this.Message == input.Message || + (this.Message != null && + this.Message.Equals(input.Message)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Code != null) + hashCode = hashCode * 59 + this.Code.GetHashCode(); + if (this.Type != null) + hashCode = hashCode * 59 + this.Type.GetHashCode(); + if (this.Message != null) + hashCode = hashCode * 59 + this.Message.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs new file mode 100644 index 0000000000..a878980f83 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ArrayOfArrayOfNumberOnly + /// + [DataContract] + public partial class ArrayOfArrayOfNumberOnly : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// arrayArrayNumber. + public ArrayOfArrayOfNumberOnly(List> arrayArrayNumber = default(List>)) + { + this.ArrayArrayNumber = arrayArrayNumber; + } + + /// + /// Gets or Sets ArrayArrayNumber + /// + [DataMember(Name="ArrayArrayNumber", EmitDefaultValue=false)] + public List> ArrayArrayNumber { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ArrayOfArrayOfNumberOnly {\n"); + sb.Append(" ArrayArrayNumber: ").Append(ArrayArrayNumber).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ArrayOfArrayOfNumberOnly); + } + + /// + /// Returns true if ArrayOfArrayOfNumberOnly instances are equal + /// + /// Instance of ArrayOfArrayOfNumberOnly to be compared + /// Boolean + public bool Equals(ArrayOfArrayOfNumberOnly input) + { + if (input == null) + return false; + + return + ( + this.ArrayArrayNumber == input.ArrayArrayNumber || + this.ArrayArrayNumber != null && + this.ArrayArrayNumber.SequenceEqual(input.ArrayArrayNumber) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.ArrayArrayNumber != null) + hashCode = hashCode * 59 + this.ArrayArrayNumber.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs new file mode 100644 index 0000000000..d5947a3432 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ArrayOfNumberOnly + /// + [DataContract] + public partial class ArrayOfNumberOnly : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// arrayNumber. + public ArrayOfNumberOnly(List arrayNumber = default(List)) + { + this.ArrayNumber = arrayNumber; + } + + /// + /// Gets or Sets ArrayNumber + /// + [DataMember(Name="ArrayNumber", EmitDefaultValue=false)] + public List ArrayNumber { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ArrayOfNumberOnly {\n"); + sb.Append(" ArrayNumber: ").Append(ArrayNumber).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ArrayOfNumberOnly); + } + + /// + /// Returns true if ArrayOfNumberOnly instances are equal + /// + /// Instance of ArrayOfNumberOnly to be compared + /// Boolean + public bool Equals(ArrayOfNumberOnly input) + { + if (input == null) + return false; + + return + ( + this.ArrayNumber == input.ArrayNumber || + this.ArrayNumber != null && + this.ArrayNumber.SequenceEqual(input.ArrayNumber) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.ArrayNumber != null) + hashCode = hashCode * 59 + this.ArrayNumber.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayTest.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayTest.cs new file mode 100644 index 0000000000..47d0d9d81c --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ArrayTest.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ArrayTest + /// + [DataContract] + public partial class ArrayTest : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// arrayOfString. + /// arrayArrayOfInteger. + /// arrayArrayOfModel. + public ArrayTest(List arrayOfString = default(List), List> arrayArrayOfInteger = default(List>), List> arrayArrayOfModel = default(List>)) + { + this.ArrayOfString = arrayOfString; + this.ArrayArrayOfInteger = arrayArrayOfInteger; + this.ArrayArrayOfModel = arrayArrayOfModel; + } + + /// + /// Gets or Sets ArrayOfString + /// + [DataMember(Name="array_of_string", EmitDefaultValue=false)] + public List ArrayOfString { get; set; } + + /// + /// Gets or Sets ArrayArrayOfInteger + /// + [DataMember(Name="array_array_of_integer", EmitDefaultValue=false)] + public List> ArrayArrayOfInteger { get; set; } + + /// + /// Gets or Sets ArrayArrayOfModel + /// + [DataMember(Name="array_array_of_model", EmitDefaultValue=false)] + public List> ArrayArrayOfModel { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ArrayTest {\n"); + sb.Append(" ArrayOfString: ").Append(ArrayOfString).Append("\n"); + sb.Append(" ArrayArrayOfInteger: ").Append(ArrayArrayOfInteger).Append("\n"); + sb.Append(" ArrayArrayOfModel: ").Append(ArrayArrayOfModel).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ArrayTest); + } + + /// + /// Returns true if ArrayTest instances are equal + /// + /// Instance of ArrayTest to be compared + /// Boolean + public bool Equals(ArrayTest input) + { + if (input == null) + return false; + + return + ( + this.ArrayOfString == input.ArrayOfString || + this.ArrayOfString != null && + this.ArrayOfString.SequenceEqual(input.ArrayOfString) + ) && + ( + this.ArrayArrayOfInteger == input.ArrayArrayOfInteger || + this.ArrayArrayOfInteger != null && + this.ArrayArrayOfInteger.SequenceEqual(input.ArrayArrayOfInteger) + ) && + ( + this.ArrayArrayOfModel == input.ArrayArrayOfModel || + this.ArrayArrayOfModel != null && + this.ArrayArrayOfModel.SequenceEqual(input.ArrayArrayOfModel) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.ArrayOfString != null) + hashCode = hashCode * 59 + this.ArrayOfString.GetHashCode(); + if (this.ArrayArrayOfInteger != null) + hashCode = hashCode * 59 + this.ArrayArrayOfInteger.GetHashCode(); + if (this.ArrayArrayOfModel != null) + hashCode = hashCode * 59 + this.ArrayArrayOfModel.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Capitalization.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Capitalization.cs new file mode 100644 index 0000000000..d4fd2c1490 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Capitalization.cs @@ -0,0 +1,206 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Capitalization + /// + [DataContract] + public partial class Capitalization : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// smallCamel. + /// capitalCamel. + /// smallSnake. + /// capitalSnake. + /// sCAETHFlowPoints. + /// Name of the pet . + public Capitalization(string smallCamel = default(string), string capitalCamel = default(string), string smallSnake = default(string), string capitalSnake = default(string), string sCAETHFlowPoints = default(string), string aTTNAME = default(string)) + { + this.SmallCamel = smallCamel; + this.CapitalCamel = capitalCamel; + this.SmallSnake = smallSnake; + this.CapitalSnake = capitalSnake; + this.SCAETHFlowPoints = sCAETHFlowPoints; + this.ATT_NAME = aTTNAME; + } + + /// + /// Gets or Sets SmallCamel + /// + [DataMember(Name="smallCamel", EmitDefaultValue=false)] + public string SmallCamel { get; set; } + + /// + /// Gets or Sets CapitalCamel + /// + [DataMember(Name="CapitalCamel", EmitDefaultValue=false)] + public string CapitalCamel { get; set; } + + /// + /// Gets or Sets SmallSnake + /// + [DataMember(Name="small_Snake", EmitDefaultValue=false)] + public string SmallSnake { get; set; } + + /// + /// Gets or Sets CapitalSnake + /// + [DataMember(Name="Capital_Snake", EmitDefaultValue=false)] + public string CapitalSnake { get; set; } + + /// + /// Gets or Sets SCAETHFlowPoints + /// + [DataMember(Name="SCA_ETH_Flow_Points", EmitDefaultValue=false)] + public string SCAETHFlowPoints { get; set; } + + /// + /// Name of the pet + /// + /// Name of the pet + [DataMember(Name="ATT_NAME", EmitDefaultValue=false)] + public string ATT_NAME { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Capitalization {\n"); + sb.Append(" SmallCamel: ").Append(SmallCamel).Append("\n"); + sb.Append(" CapitalCamel: ").Append(CapitalCamel).Append("\n"); + sb.Append(" SmallSnake: ").Append(SmallSnake).Append("\n"); + sb.Append(" CapitalSnake: ").Append(CapitalSnake).Append("\n"); + sb.Append(" SCAETHFlowPoints: ").Append(SCAETHFlowPoints).Append("\n"); + sb.Append(" ATT_NAME: ").Append(ATT_NAME).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Capitalization); + } + + /// + /// Returns true if Capitalization instances are equal + /// + /// Instance of Capitalization to be compared + /// Boolean + public bool Equals(Capitalization input) + { + if (input == null) + return false; + + return + ( + this.SmallCamel == input.SmallCamel || + (this.SmallCamel != null && + this.SmallCamel.Equals(input.SmallCamel)) + ) && + ( + this.CapitalCamel == input.CapitalCamel || + (this.CapitalCamel != null && + this.CapitalCamel.Equals(input.CapitalCamel)) + ) && + ( + this.SmallSnake == input.SmallSnake || + (this.SmallSnake != null && + this.SmallSnake.Equals(input.SmallSnake)) + ) && + ( + this.CapitalSnake == input.CapitalSnake || + (this.CapitalSnake != null && + this.CapitalSnake.Equals(input.CapitalSnake)) + ) && + ( + this.SCAETHFlowPoints == input.SCAETHFlowPoints || + (this.SCAETHFlowPoints != null && + this.SCAETHFlowPoints.Equals(input.SCAETHFlowPoints)) + ) && + ( + this.ATT_NAME == input.ATT_NAME || + (this.ATT_NAME != null && + this.ATT_NAME.Equals(input.ATT_NAME)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.SmallCamel != null) + hashCode = hashCode * 59 + this.SmallCamel.GetHashCode(); + if (this.CapitalCamel != null) + hashCode = hashCode * 59 + this.CapitalCamel.GetHashCode(); + if (this.SmallSnake != null) + hashCode = hashCode * 59 + this.SmallSnake.GetHashCode(); + if (this.CapitalSnake != null) + hashCode = hashCode * 59 + this.CapitalSnake.GetHashCode(); + if (this.SCAETHFlowPoints != null) + hashCode = hashCode * 59 + this.SCAETHFlowPoints.GetHashCode(); + if (this.ATT_NAME != null) + hashCode = hashCode * 59 + this.ATT_NAME.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Cat.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Cat.cs new file mode 100644 index 0000000000..190a169574 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Cat.cs @@ -0,0 +1,132 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Cat + /// + [DataContract] + public partial class Cat : Animal, IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Cat() { } + /// + /// Initializes a new instance of the class. + /// + /// declawed. + public Cat(bool? declawed = default(bool?), string className = default(string), string color = "red") : base(className, color) + { + this.Declawed = declawed; + } + + /// + /// Gets or Sets Declawed + /// + [DataMember(Name="declawed", EmitDefaultValue=false)] + public bool? Declawed { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Cat {\n"); + sb.Append(" ").Append(base.ToString().Replace("\n", "\n ")).Append("\n"); + sb.Append(" Declawed: ").Append(Declawed).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public override string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Cat); + } + + /// + /// Returns true if Cat instances are equal + /// + /// Instance of Cat to be compared + /// Boolean + public bool Equals(Cat input) + { + if (input == null) + return false; + + return base.Equals(input) && + ( + this.Declawed == input.Declawed || + (this.Declawed != null && + this.Declawed.Equals(input.Declawed)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = base.GetHashCode(); + if (this.Declawed != null) + hashCode = hashCode * 59 + this.Declawed.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + foreach(var x in BaseValidate(validationContext)) yield return x; + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Category.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Category.cs new file mode 100644 index 0000000000..6fba39bdd0 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Category.cs @@ -0,0 +1,154 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Category + /// + [DataContract] + public partial class Category : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Category() { } + /// + /// Initializes a new instance of the class. + /// + /// id. + /// name (required) (default to "default-name"). + public Category(long? id = default(long?), string name = "default-name") + { + // to ensure "name" is required (not null) + if (name == null) + { + throw new InvalidDataException("name is a required property for Category and cannot be null"); + } + else + { + this.Name = name; + } + this.Id = id; + } + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Category {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Category); + } + + /// + /// Returns true if Category instances are equal + /// + /// Instance of Category to be compared + /// Boolean + public bool Equals(Category input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.Name == input.Name || + (this.Name != null && + this.Name.Equals(input.Name)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.Name != null) + hashCode = hashCode * 59 + this.Name.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ClassModel.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ClassModel.cs new file mode 100644 index 0000000000..65d25164aa --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ClassModel.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Model for testing model with \"_class\" property + /// + [DataContract] + public partial class ClassModel : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// _class. + public ClassModel(string _class = default(string)) + { + this.Class = _class; + } + + /// + /// Gets or Sets Class + /// + [DataMember(Name="_class", EmitDefaultValue=false)] + public string Class { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ClassModel {\n"); + sb.Append(" Class: ").Append(Class).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ClassModel); + } + + /// + /// Returns true if ClassModel instances are equal + /// + /// Instance of ClassModel to be compared + /// Boolean + public bool Equals(ClassModel input) + { + if (input == null) + return false; + + return + ( + this.Class == input.Class || + (this.Class != null && + this.Class.Equals(input.Class)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Class != null) + hashCode = hashCode * 59 + this.Class.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Dog.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Dog.cs new file mode 100644 index 0000000000..bdc139d4ae --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Dog.cs @@ -0,0 +1,132 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Dog + /// + [DataContract] + public partial class Dog : Animal, IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Dog() { } + /// + /// Initializes a new instance of the class. + /// + /// breed. + public Dog(string breed = default(string), string className = default(string), string color = "red") : base(className, color) + { + this.Breed = breed; + } + + /// + /// Gets or Sets Breed + /// + [DataMember(Name="breed", EmitDefaultValue=false)] + public string Breed { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Dog {\n"); + sb.Append(" ").Append(base.ToString().Replace("\n", "\n ")).Append("\n"); + sb.Append(" Breed: ").Append(Breed).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public override string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Dog); + } + + /// + /// Returns true if Dog instances are equal + /// + /// Instance of Dog to be compared + /// Boolean + public bool Equals(Dog input) + { + if (input == null) + return false; + + return base.Equals(input) && + ( + this.Breed == input.Breed || + (this.Breed != null && + this.Breed.Equals(input.Breed)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = base.GetHashCode(); + if (this.Breed != null) + hashCode = hashCode * 59 + this.Breed.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + foreach(var x in BaseValidate(validationContext)) yield return x; + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumArrays.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumArrays.cs new file mode 100644 index 0000000000..3f5ed93d54 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumArrays.cs @@ -0,0 +1,182 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// EnumArrays + /// + [DataContract] + public partial class EnumArrays : IEquatable, IValidatableObject + { + /// + /// Defines JustSymbol + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum JustSymbolEnum + { + /// + /// Enum GreaterThanOrEqualTo for value: >= + /// + [EnumMember(Value = ">=")] + GreaterThanOrEqualTo = 1, + + /// + /// Enum Dollar for value: $ + /// + [EnumMember(Value = "$")] + Dollar = 2 + + } + + /// + /// Gets or Sets JustSymbol + /// + [DataMember(Name="just_symbol", EmitDefaultValue=false)] + public JustSymbolEnum? JustSymbol { get; set; } + /// + /// Defines ArrayEnum + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum ArrayEnumEnum + { + /// + /// Enum Fish for value: fish + /// + [EnumMember(Value = "fish")] + Fish = 1, + + /// + /// Enum Crab for value: crab + /// + [EnumMember(Value = "crab")] + Crab = 2 + + } + + + /// + /// Gets or Sets ArrayEnum + /// + [DataMember(Name="array_enum", EmitDefaultValue=false)] + public List ArrayEnum { get; set; } + /// + /// Initializes a new instance of the class. + /// + /// justSymbol. + /// arrayEnum. + public EnumArrays(JustSymbolEnum? justSymbol = default(JustSymbolEnum?), List arrayEnum = default(List)) + { + this.JustSymbol = justSymbol; + this.ArrayEnum = arrayEnum; + } + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class EnumArrays {\n"); + sb.Append(" JustSymbol: ").Append(JustSymbol).Append("\n"); + sb.Append(" ArrayEnum: ").Append(ArrayEnum).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as EnumArrays); + } + + /// + /// Returns true if EnumArrays instances are equal + /// + /// Instance of EnumArrays to be compared + /// Boolean + public bool Equals(EnumArrays input) + { + if (input == null) + return false; + + return + ( + this.JustSymbol == input.JustSymbol || + (this.JustSymbol != null && + this.JustSymbol.Equals(input.JustSymbol)) + ) && + ( + this.ArrayEnum == input.ArrayEnum || + this.ArrayEnum != null && + this.ArrayEnum.SequenceEqual(input.ArrayEnum) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.JustSymbol != null) + hashCode = hashCode * 59 + this.JustSymbol.GetHashCode(); + if (this.ArrayEnum != null) + hashCode = hashCode * 59 + this.ArrayEnum.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumClass.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumClass.cs new file mode 100644 index 0000000000..9773747578 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumClass.cs @@ -0,0 +1,56 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Defines EnumClass + /// + + [JsonConverter(typeof(StringEnumConverter))] + + public enum EnumClass + { + /// + /// Enum Abc for value: _abc + /// + [EnumMember(Value = "_abc")] + Abc = 1, + + /// + /// Enum Efg for value: -efg + /// + [EnumMember(Value = "-efg")] + Efg = 2, + + /// + /// Enum Xyz for value: (xyz) + /// + [EnumMember(Value = "(xyz)")] + Xyz = 3 + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumTest.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumTest.cs new file mode 100644 index 0000000000..b092ad6e35 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/EnumTest.cs @@ -0,0 +1,291 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// EnumTest + /// + [DataContract] + public partial class EnumTest : IEquatable, IValidatableObject + { + /// + /// Defines EnumString + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum EnumStringEnum + { + /// + /// Enum UPPER for value: UPPER + /// + [EnumMember(Value = "UPPER")] + UPPER = 1, + + /// + /// Enum Lower for value: lower + /// + [EnumMember(Value = "lower")] + Lower = 2, + + /// + /// Enum Empty for value: + /// + [EnumMember(Value = "")] + Empty = 3 + + } + + /// + /// Gets or Sets EnumString + /// + [DataMember(Name="enum_string", EmitDefaultValue=false)] + public EnumStringEnum? EnumString { get; set; } + /// + /// Defines EnumStringRequired + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum EnumStringRequiredEnum + { + /// + /// Enum UPPER for value: UPPER + /// + [EnumMember(Value = "UPPER")] + UPPER = 1, + + /// + /// Enum Lower for value: lower + /// + [EnumMember(Value = "lower")] + Lower = 2, + + /// + /// Enum Empty for value: + /// + [EnumMember(Value = "")] + Empty = 3 + + } + + /// + /// Gets or Sets EnumStringRequired + /// + [DataMember(Name="enum_string_required", EmitDefaultValue=false)] + public EnumStringRequiredEnum EnumStringRequired { get; set; } + /// + /// Defines EnumInteger + /// + public enum EnumIntegerEnum + { + /// + /// Enum NUMBER_1 for value: 1 + /// + NUMBER_1 = 1, + + /// + /// Enum NUMBER_MINUS_1 for value: -1 + /// + NUMBER_MINUS_1 = -1 + + } + + /// + /// Gets or Sets EnumInteger + /// + [DataMember(Name="enum_integer", EmitDefaultValue=false)] + public EnumIntegerEnum? EnumInteger { get; set; } + /// + /// Defines EnumNumber + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum EnumNumberEnum + { + /// + /// Enum NUMBER_1_DOT_1 for value: 1.1 + /// + [EnumMember(Value = "1.1")] + NUMBER_1_DOT_1 = 1, + + /// + /// Enum NUMBER_MINUS_1_DOT_2 for value: -1.2 + /// + [EnumMember(Value = "-1.2")] + NUMBER_MINUS_1_DOT_2 = 2 + + } + + /// + /// Gets or Sets EnumNumber + /// + [DataMember(Name="enum_number", EmitDefaultValue=false)] + public EnumNumberEnum? EnumNumber { get; set; } + /// + /// Gets or Sets OuterEnum + /// + [DataMember(Name="outerEnum", EmitDefaultValue=false)] + public OuterEnum? OuterEnum { get; set; } + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected EnumTest() { } + /// + /// Initializes a new instance of the class. + /// + /// enumString. + /// enumStringRequired (required). + /// enumInteger. + /// enumNumber. + /// outerEnum. + public EnumTest(EnumStringEnum? enumString = default(EnumStringEnum?), EnumStringRequiredEnum enumStringRequired = default(EnumStringRequiredEnum), EnumIntegerEnum? enumInteger = default(EnumIntegerEnum?), EnumNumberEnum? enumNumber = default(EnumNumberEnum?), OuterEnum? outerEnum = default(OuterEnum?)) + { + // to ensure "enumStringRequired" is required (not null) + if (enumStringRequired == null) + { + throw new InvalidDataException("enumStringRequired is a required property for EnumTest and cannot be null"); + } + else + { + this.EnumStringRequired = enumStringRequired; + } + this.EnumString = enumString; + this.EnumInteger = enumInteger; + this.EnumNumber = enumNumber; + this.OuterEnum = outerEnum; + } + + + + + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class EnumTest {\n"); + sb.Append(" EnumString: ").Append(EnumString).Append("\n"); + sb.Append(" EnumStringRequired: ").Append(EnumStringRequired).Append("\n"); + sb.Append(" EnumInteger: ").Append(EnumInteger).Append("\n"); + sb.Append(" EnumNumber: ").Append(EnumNumber).Append("\n"); + sb.Append(" OuterEnum: ").Append(OuterEnum).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as EnumTest); + } + + /// + /// Returns true if EnumTest instances are equal + /// + /// Instance of EnumTest to be compared + /// Boolean + public bool Equals(EnumTest input) + { + if (input == null) + return false; + + return + ( + this.EnumString == input.EnumString || + (this.EnumString != null && + this.EnumString.Equals(input.EnumString)) + ) && + ( + this.EnumStringRequired == input.EnumStringRequired || + (this.EnumStringRequired != null && + this.EnumStringRequired.Equals(input.EnumStringRequired)) + ) && + ( + this.EnumInteger == input.EnumInteger || + (this.EnumInteger != null && + this.EnumInteger.Equals(input.EnumInteger)) + ) && + ( + this.EnumNumber == input.EnumNumber || + (this.EnumNumber != null && + this.EnumNumber.Equals(input.EnumNumber)) + ) && + ( + this.OuterEnum == input.OuterEnum || + (this.OuterEnum != null && + this.OuterEnum.Equals(input.OuterEnum)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.EnumString != null) + hashCode = hashCode * 59 + this.EnumString.GetHashCode(); + if (this.EnumStringRequired != null) + hashCode = hashCode * 59 + this.EnumStringRequired.GetHashCode(); + if (this.EnumInteger != null) + hashCode = hashCode * 59 + this.EnumInteger.GetHashCode(); + if (this.EnumNumber != null) + hashCode = hashCode * 59 + this.EnumNumber.GetHashCode(); + if (this.OuterEnum != null) + hashCode = hashCode * 59 + this.OuterEnum.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/File.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/File.cs new file mode 100644 index 0000000000..7e594c1e94 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/File.cs @@ -0,0 +1,126 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Must be named `File` for test. + /// + [DataContract] + public partial class File : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// Test capitalization. + public File(string sourceURI = default(string)) + { + this.SourceURI = sourceURI; + } + + /// + /// Test capitalization + /// + /// Test capitalization + [DataMember(Name="sourceURI", EmitDefaultValue=false)] + public string SourceURI { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class File {\n"); + sb.Append(" SourceURI: ").Append(SourceURI).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as File); + } + + /// + /// Returns true if File instances are equal + /// + /// Instance of File to be compared + /// Boolean + public bool Equals(File input) + { + if (input == null) + return false; + + return + ( + this.SourceURI == input.SourceURI || + (this.SourceURI != null && + this.SourceURI.Equals(input.SourceURI)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.SourceURI != null) + hashCode = hashCode * 59 + this.SourceURI.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs new file mode 100644 index 0000000000..412c4bee81 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs @@ -0,0 +1,141 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// FileSchemaTestClass + /// + [DataContract] + public partial class FileSchemaTestClass : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// file. + /// files. + public FileSchemaTestClass(System.IO.Stream file = default(System.IO.Stream), List files = default(List)) + { + this.File = file; + this.Files = files; + } + + /// + /// Gets or Sets File + /// + [DataMember(Name="file", EmitDefaultValue=false)] + public System.IO.Stream File { get; set; } + + /// + /// Gets or Sets Files + /// + [DataMember(Name="files", EmitDefaultValue=false)] + public List Files { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class FileSchemaTestClass {\n"); + sb.Append(" File: ").Append(File).Append("\n"); + sb.Append(" Files: ").Append(Files).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as FileSchemaTestClass); + } + + /// + /// Returns true if FileSchemaTestClass instances are equal + /// + /// Instance of FileSchemaTestClass to be compared + /// Boolean + public bool Equals(FileSchemaTestClass input) + { + if (input == null) + return false; + + return + ( + this.File == input.File || + (this.File != null && + this.File.Equals(input.File)) + ) && + ( + this.Files == input.Files || + this.Files != null && + this.Files.SequenceEqual(input.Files) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.File != null) + hashCode = hashCode * 59 + this.File.GetHashCode(); + if (this.Files != null) + hashCode = hashCode * 59 + this.Files.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FormatTest.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FormatTest.cs new file mode 100644 index 0000000000..0a6425d095 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/FormatTest.cs @@ -0,0 +1,434 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// FormatTest + /// + [DataContract] + public partial class FormatTest : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected FormatTest() { } + /// + /// Initializes a new instance of the class. + /// + /// integer. + /// int32. + /// int64. + /// number (required). + /// _float. + /// _double. + /// _string. + /// _byte (required). + /// binary. + /// date (required). + /// dateTime. + /// uuid. + /// password (required). + 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?), 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)) + { + // to ensure "number" is required (not null) + if (number == null) + { + throw new InvalidDataException("number is a required property for FormatTest and cannot be null"); + } + else + { + this.Number = number; + } + // to ensure "_byte" is required (not null) + if (_byte == null) + { + throw new InvalidDataException("_byte is a required property for FormatTest and cannot be null"); + } + else + { + this.Byte = _byte; + } + // to ensure "date" is required (not null) + if (date == null) + { + throw new InvalidDataException("date is a required property for FormatTest and cannot be null"); + } + else + { + this.Date = date; + } + // to ensure "password" is required (not null) + if (password == null) + { + throw new InvalidDataException("password is a required property for FormatTest and cannot be null"); + } + else + { + this.Password = password; + } + this.Integer = integer; + this.Int32 = int32; + this.Int64 = int64; + this.Float = _float; + this.Double = _double; + this.String = _string; + this.Binary = binary; + this.DateTime = dateTime; + this.Uuid = uuid; + } + + /// + /// Gets or Sets Integer + /// + [DataMember(Name="integer", EmitDefaultValue=false)] + public int? Integer { get; set; } + + /// + /// Gets or Sets Int32 + /// + [DataMember(Name="int32", EmitDefaultValue=false)] + public int? Int32 { get; set; } + + /// + /// Gets or Sets Int64 + /// + [DataMember(Name="int64", EmitDefaultValue=false)] + public long? Int64 { get; set; } + + /// + /// Gets or Sets Number + /// + [DataMember(Name="number", EmitDefaultValue=false)] + public decimal? Number { get; set; } + + /// + /// Gets or Sets Float + /// + [DataMember(Name="float", EmitDefaultValue=false)] + public float? Float { get; set; } + + /// + /// Gets or Sets Double + /// + [DataMember(Name="double", EmitDefaultValue=false)] + public double? Double { get; set; } + + /// + /// Gets or Sets String + /// + [DataMember(Name="string", EmitDefaultValue=false)] + public string String { get; set; } + + /// + /// Gets or Sets Byte + /// + [DataMember(Name="byte", EmitDefaultValue=false)] + public byte[] Byte { get; set; } + + /// + /// Gets or Sets Binary + /// + [DataMember(Name="binary", EmitDefaultValue=false)] + public System.IO.Stream Binary { get; set; } + + /// + /// Gets or Sets Date + /// + [DataMember(Name="date", EmitDefaultValue=false)] + [JsonConverter(typeof(OpenAPIDateConverter))] + public DateTime? Date { get; set; } + + /// + /// Gets or Sets DateTime + /// + [DataMember(Name="dateTime", EmitDefaultValue=false)] + public DateTime? DateTime { get; set; } + + /// + /// Gets or Sets Uuid + /// + [DataMember(Name="uuid", EmitDefaultValue=false)] + public Guid? Uuid { get; set; } + + /// + /// Gets or Sets Password + /// + [DataMember(Name="password", EmitDefaultValue=false)] + public string Password { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class FormatTest {\n"); + sb.Append(" Integer: ").Append(Integer).Append("\n"); + sb.Append(" Int32: ").Append(Int32).Append("\n"); + sb.Append(" Int64: ").Append(Int64).Append("\n"); + sb.Append(" Number: ").Append(Number).Append("\n"); + sb.Append(" Float: ").Append(Float).Append("\n"); + sb.Append(" Double: ").Append(Double).Append("\n"); + sb.Append(" String: ").Append(String).Append("\n"); + sb.Append(" Byte: ").Append(Byte).Append("\n"); + sb.Append(" Binary: ").Append(Binary).Append("\n"); + sb.Append(" Date: ").Append(Date).Append("\n"); + sb.Append(" DateTime: ").Append(DateTime).Append("\n"); + sb.Append(" Uuid: ").Append(Uuid).Append("\n"); + sb.Append(" Password: ").Append(Password).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as FormatTest); + } + + /// + /// Returns true if FormatTest instances are equal + /// + /// Instance of FormatTest to be compared + /// Boolean + public bool Equals(FormatTest input) + { + if (input == null) + return false; + + return + ( + this.Integer == input.Integer || + (this.Integer != null && + this.Integer.Equals(input.Integer)) + ) && + ( + this.Int32 == input.Int32 || + (this.Int32 != null && + this.Int32.Equals(input.Int32)) + ) && + ( + this.Int64 == input.Int64 || + (this.Int64 != null && + this.Int64.Equals(input.Int64)) + ) && + ( + this.Number == input.Number || + (this.Number != null && + this.Number.Equals(input.Number)) + ) && + ( + this.Float == input.Float || + (this.Float != null && + this.Float.Equals(input.Float)) + ) && + ( + this.Double == input.Double || + (this.Double != null && + this.Double.Equals(input.Double)) + ) && + ( + this.String == input.String || + (this.String != null && + this.String.Equals(input.String)) + ) && + ( + this.Byte == input.Byte || + (this.Byte != null && + this.Byte.Equals(input.Byte)) + ) && + ( + this.Binary == input.Binary || + (this.Binary != null && + this.Binary.Equals(input.Binary)) + ) && + ( + this.Date == input.Date || + (this.Date != null && + this.Date.Equals(input.Date)) + ) && + ( + this.DateTime == input.DateTime || + (this.DateTime != null && + this.DateTime.Equals(input.DateTime)) + ) && + ( + this.Uuid == input.Uuid || + (this.Uuid != null && + this.Uuid.Equals(input.Uuid)) + ) && + ( + this.Password == input.Password || + (this.Password != null && + this.Password.Equals(input.Password)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Integer != null) + hashCode = hashCode * 59 + this.Integer.GetHashCode(); + if (this.Int32 != null) + hashCode = hashCode * 59 + this.Int32.GetHashCode(); + if (this.Int64 != null) + hashCode = hashCode * 59 + this.Int64.GetHashCode(); + if (this.Number != null) + hashCode = hashCode * 59 + this.Number.GetHashCode(); + if (this.Float != null) + hashCode = hashCode * 59 + this.Float.GetHashCode(); + if (this.Double != null) + hashCode = hashCode * 59 + this.Double.GetHashCode(); + if (this.String != null) + hashCode = hashCode * 59 + this.String.GetHashCode(); + if (this.Byte != null) + hashCode = hashCode * 59 + this.Byte.GetHashCode(); + if (this.Binary != null) + hashCode = hashCode * 59 + this.Binary.GetHashCode(); + if (this.Date != null) + hashCode = hashCode * 59 + this.Date.GetHashCode(); + if (this.DateTime != null) + hashCode = hashCode * 59 + this.DateTime.GetHashCode(); + if (this.Uuid != null) + hashCode = hashCode * 59 + this.Uuid.GetHashCode(); + if (this.Password != null) + hashCode = hashCode * 59 + this.Password.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + // Integer (int?) maximum + if(this.Integer > (int?)100) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Integer, must be a value less than or equal to 100.", new [] { "Integer" }); + } + + // Integer (int?) minimum + if(this.Integer < (int?)10) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Integer, must be a value greater than or equal to 10.", new [] { "Integer" }); + } + + // Int32 (int?) maximum + if(this.Int32 > (int?)200) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Int32, must be a value less than or equal to 200.", new [] { "Int32" }); + } + + // Int32 (int?) minimum + if(this.Int32 < (int?)20) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Int32, must be a value greater than or equal to 20.", new [] { "Int32" }); + } + + // Number (decimal?) maximum + if(this.Number > (decimal?)543.2) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Number, must be a value less than or equal to 543.2.", new [] { "Number" }); + } + + // Number (decimal?) minimum + if(this.Number < (decimal?)32.1) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Number, must be a value greater than or equal to 32.1.", new [] { "Number" }); + } + + // Float (float?) maximum + if(this.Float > (float?)987.6) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Float, must be a value less than or equal to 987.6.", new [] { "Float" }); + } + + // Float (float?) minimum + if(this.Float < (float?)54.3) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Float, must be a value greater than or equal to 54.3.", new [] { "Float" }); + } + + // Double (double?) maximum + if(this.Double > (double?)123.4) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Double, must be a value less than or equal to 123.4.", new [] { "Double" }); + } + + // Double (double?) minimum + if(this.Double < (double?)67.8) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Double, must be a value greater than or equal to 67.8.", new [] { "Double" }); + } + + // String (string) pattern + Regex regexString = new Regex(@"[a-z]", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); + if (false == regexString.Match(this.String).Success) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for String, must match a pattern of " + regexString, new [] { "String" }); + } + + // Password (string) maxLength + if(this.Password != null && this.Password.Length > 64) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Password, length must be less than 64.", new [] { "Password" }); + } + + // Password (string) minLength + if(this.Password != null && this.Password.Length < 10) + { + yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Password, length must be greater than 10.", new [] { "Password" }); + } + + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs new file mode 100644 index 0000000000..30cce0327d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs @@ -0,0 +1,138 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// HasOnlyReadOnly + /// + [DataContract] + public partial class HasOnlyReadOnly : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + public HasOnlyReadOnly() + { + } + + /// + /// Gets or Sets Bar + /// + [DataMember(Name="bar", EmitDefaultValue=false)] + public string Bar { get; private set; } + + /// + /// Gets or Sets Foo + /// + [DataMember(Name="foo", EmitDefaultValue=false)] + public string Foo { get; private set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class HasOnlyReadOnly {\n"); + sb.Append(" Bar: ").Append(Bar).Append("\n"); + sb.Append(" Foo: ").Append(Foo).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as HasOnlyReadOnly); + } + + /// + /// Returns true if HasOnlyReadOnly instances are equal + /// + /// Instance of HasOnlyReadOnly to be compared + /// Boolean + public bool Equals(HasOnlyReadOnly input) + { + if (input == null) + return false; + + return + ( + this.Bar == input.Bar || + (this.Bar != null && + this.Bar.Equals(input.Bar)) + ) && + ( + this.Foo == input.Foo || + (this.Foo != null && + this.Foo.Equals(input.Foo)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Bar != null) + hashCode = hashCode * 59 + this.Bar.GetHashCode(); + if (this.Foo != null) + hashCode = hashCode * 59 + this.Foo.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/List.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/List.cs new file mode 100644 index 0000000000..c5c9e46d63 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/List.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// List + /// + [DataContract] + public partial class List : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// _123list. + public List(string _123list = default(string)) + { + this._123List = _123list; + } + + /// + /// Gets or Sets _123List + /// + [DataMember(Name="123-list", EmitDefaultValue=false)] + public string _123List { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class List {\n"); + sb.Append(" _123List: ").Append(_123List).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as List); + } + + /// + /// Returns true if List instances are equal + /// + /// Instance of List to be compared + /// Boolean + public bool Equals(List input) + { + if (input == null) + return false; + + return + ( + this._123List == input._123List || + (this._123List != null && + this._123List.Equals(input._123List)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this._123List != null) + hashCode = hashCode * 59 + this._123List.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MapTest.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MapTest.cs new file mode 100644 index 0000000000..ff1bcfc220 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MapTest.cs @@ -0,0 +1,194 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// MapTest + /// + [DataContract] + public partial class MapTest : IEquatable, IValidatableObject + { + /// + /// Defines Inner + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum InnerEnum + { + /// + /// Enum UPPER for value: UPPER + /// + [EnumMember(Value = "UPPER")] + UPPER = 1, + + /// + /// Enum Lower for value: lower + /// + [EnumMember(Value = "lower")] + Lower = 2 + + } + + + /// + /// Gets or Sets MapOfEnumString + /// + [DataMember(Name="map_of_enum_string", EmitDefaultValue=false)] + public Dictionary MapOfEnumString { get; set; } + /// + /// Initializes a new instance of the class. + /// + /// mapMapOfString. + /// mapOfEnumString. + /// directMap. + /// indirectMap. + public MapTest(Dictionary> mapMapOfString = default(Dictionary>), Dictionary mapOfEnumString = default(Dictionary), Dictionary directMap = default(Dictionary), Dictionary indirectMap = default(Dictionary)) + { + this.MapMapOfString = mapMapOfString; + this.MapOfEnumString = mapOfEnumString; + this.DirectMap = directMap; + this.IndirectMap = indirectMap; + } + + /// + /// Gets or Sets MapMapOfString + /// + [DataMember(Name="map_map_of_string", EmitDefaultValue=false)] + public Dictionary> MapMapOfString { get; set; } + + + /// + /// Gets or Sets DirectMap + /// + [DataMember(Name="direct_map", EmitDefaultValue=false)] + public Dictionary DirectMap { get; set; } + + /// + /// Gets or Sets IndirectMap + /// + [DataMember(Name="indirect_map", EmitDefaultValue=false)] + public Dictionary IndirectMap { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class MapTest {\n"); + sb.Append(" MapMapOfString: ").Append(MapMapOfString).Append("\n"); + sb.Append(" MapOfEnumString: ").Append(MapOfEnumString).Append("\n"); + sb.Append(" DirectMap: ").Append(DirectMap).Append("\n"); + sb.Append(" IndirectMap: ").Append(IndirectMap).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as MapTest); + } + + /// + /// Returns true if MapTest instances are equal + /// + /// Instance of MapTest to be compared + /// Boolean + public bool Equals(MapTest input) + { + if (input == null) + return false; + + return + ( + this.MapMapOfString == input.MapMapOfString || + this.MapMapOfString != null && + this.MapMapOfString.SequenceEqual(input.MapMapOfString) + ) && + ( + this.MapOfEnumString == input.MapOfEnumString || + this.MapOfEnumString != null && + this.MapOfEnumString.SequenceEqual(input.MapOfEnumString) + ) && + ( + this.DirectMap == input.DirectMap || + this.DirectMap != null && + this.DirectMap.SequenceEqual(input.DirectMap) + ) && + ( + this.IndirectMap == input.IndirectMap || + this.IndirectMap != null && + this.IndirectMap.SequenceEqual(input.IndirectMap) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.MapMapOfString != null) + hashCode = hashCode * 59 + this.MapMapOfString.GetHashCode(); + if (this.MapOfEnumString != null) + hashCode = hashCode * 59 + this.MapOfEnumString.GetHashCode(); + if (this.DirectMap != null) + hashCode = hashCode * 59 + this.DirectMap.GetHashCode(); + if (this.IndirectMap != null) + hashCode = hashCode * 59 + this.IndirectMap.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs new file mode 100644 index 0000000000..e729c3292e --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// MixedPropertiesAndAdditionalPropertiesClass + /// + [DataContract] + public partial class MixedPropertiesAndAdditionalPropertiesClass : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// uuid. + /// dateTime. + /// map. + public MixedPropertiesAndAdditionalPropertiesClass(Guid? uuid = default(Guid?), DateTime? dateTime = default(DateTime?), Dictionary map = default(Dictionary)) + { + this.Uuid = uuid; + this.DateTime = dateTime; + this.Map = map; + } + + /// + /// Gets or Sets Uuid + /// + [DataMember(Name="uuid", EmitDefaultValue=false)] + public Guid? Uuid { get; set; } + + /// + /// Gets or Sets DateTime + /// + [DataMember(Name="dateTime", EmitDefaultValue=false)] + public DateTime? DateTime { get; set; } + + /// + /// Gets or Sets Map + /// + [DataMember(Name="map", EmitDefaultValue=false)] + public Dictionary Map { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class MixedPropertiesAndAdditionalPropertiesClass {\n"); + sb.Append(" Uuid: ").Append(Uuid).Append("\n"); + sb.Append(" DateTime: ").Append(DateTime).Append("\n"); + sb.Append(" Map: ").Append(Map).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as MixedPropertiesAndAdditionalPropertiesClass); + } + + /// + /// Returns true if MixedPropertiesAndAdditionalPropertiesClass instances are equal + /// + /// Instance of MixedPropertiesAndAdditionalPropertiesClass to be compared + /// Boolean + public bool Equals(MixedPropertiesAndAdditionalPropertiesClass input) + { + if (input == null) + return false; + + return + ( + this.Uuid == input.Uuid || + (this.Uuid != null && + this.Uuid.Equals(input.Uuid)) + ) && + ( + this.DateTime == input.DateTime || + (this.DateTime != null && + this.DateTime.Equals(input.DateTime)) + ) && + ( + this.Map == input.Map || + this.Map != null && + this.Map.SequenceEqual(input.Map) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Uuid != null) + hashCode = hashCode * 59 + this.Uuid.GetHashCode(); + if (this.DateTime != null) + hashCode = hashCode * 59 + this.DateTime.GetHashCode(); + if (this.Map != null) + hashCode = hashCode * 59 + this.Map.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Model200Response.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Model200Response.cs new file mode 100644 index 0000000000..76ab8f4e7f --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Model200Response.cs @@ -0,0 +1,141 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Model for testing model name starting with number + /// + [DataContract] + public partial class Model200Response : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// name. + /// _class. + public Model200Response(int? name = default(int?), string _class = default(string)) + { + this.Name = name; + this.Class = _class; + } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public int? Name { get; set; } + + /// + /// Gets or Sets Class + /// + [DataMember(Name="class", EmitDefaultValue=false)] + public string Class { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Model200Response {\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" Class: ").Append(Class).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Model200Response); + } + + /// + /// Returns true if Model200Response instances are equal + /// + /// Instance of Model200Response to be compared + /// Boolean + public bool Equals(Model200Response input) + { + if (input == null) + return false; + + return + ( + this.Name == input.Name || + (this.Name != null && + this.Name.Equals(input.Name)) + ) && + ( + this.Class == input.Class || + (this.Class != null && + this.Class.Equals(input.Class)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Name != null) + hashCode = hashCode * 59 + this.Name.GetHashCode(); + if (this.Class != null) + hashCode = hashCode * 59 + this.Class.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ModelClient.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ModelClient.cs new file mode 100644 index 0000000000..aa6ac6675b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ModelClient.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ModelClient + /// + [DataContract] + public partial class ModelClient : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// _client. + public ModelClient(string _client = default(string)) + { + this.__Client = _client; + } + + /// + /// Gets or Sets __Client + /// + [DataMember(Name="client", EmitDefaultValue=false)] + public string __Client { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ModelClient {\n"); + sb.Append(" __Client: ").Append(__Client).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ModelClient); + } + + /// + /// Returns true if ModelClient instances are equal + /// + /// Instance of ModelClient to be compared + /// Boolean + public bool Equals(ModelClient input) + { + if (input == null) + return false; + + return + ( + this.__Client == input.__Client || + (this.__Client != null && + this.__Client.Equals(input.__Client)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.__Client != null) + hashCode = hashCode * 59 + this.__Client.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Name.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Name.cs new file mode 100644 index 0000000000..db42ccc28b --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Name.cs @@ -0,0 +1,182 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Model for testing model name same as property name + /// + [DataContract] + public partial class Name : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Name() { } + /// + /// Initializes a new instance of the class. + /// + /// name (required). + /// property. + public Name(int? name = default(int?), string property = default(string)) + { + // to ensure "name" is required (not null) + if (name == null) + { + throw new InvalidDataException("name is a required property for Name and cannot be null"); + } + else + { + this._Name = name; + } + this.Property = property; + } + + /// + /// Gets or Sets _Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public int? _Name { get; set; } + + /// + /// Gets or Sets SnakeCase + /// + [DataMember(Name="snake_case", EmitDefaultValue=false)] + public int? SnakeCase { get; private set; } + + /// + /// Gets or Sets Property + /// + [DataMember(Name="property", EmitDefaultValue=false)] + public string Property { get; set; } + + /// + /// Gets or Sets _123Number + /// + [DataMember(Name="123Number", EmitDefaultValue=false)] + public int? _123Number { get; private set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Name {\n"); + sb.Append(" _Name: ").Append(_Name).Append("\n"); + sb.Append(" SnakeCase: ").Append(SnakeCase).Append("\n"); + sb.Append(" Property: ").Append(Property).Append("\n"); + sb.Append(" _123Number: ").Append(_123Number).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Name); + } + + /// + /// Returns true if Name instances are equal + /// + /// Instance of Name to be compared + /// Boolean + public bool Equals(Name input) + { + if (input == null) + return false; + + return + ( + this._Name == input._Name || + (this._Name != null && + this._Name.Equals(input._Name)) + ) && + ( + this.SnakeCase == input.SnakeCase || + (this.SnakeCase != null && + this.SnakeCase.Equals(input.SnakeCase)) + ) && + ( + this.Property == input.Property || + (this.Property != null && + this.Property.Equals(input.Property)) + ) && + ( + this._123Number == input._123Number || + (this._123Number != null && + this._123Number.Equals(input._123Number)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this._Name != null) + hashCode = hashCode * 59 + this._Name.GetHashCode(); + if (this.SnakeCase != null) + hashCode = hashCode * 59 + this.SnakeCase.GetHashCode(); + if (this.Property != null) + hashCode = hashCode * 59 + this.Property.GetHashCode(); + if (this._123Number != null) + hashCode = hashCode * 59 + this._123Number.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/NumberOnly.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/NumberOnly.cs new file mode 100644 index 0000000000..5003ae89c2 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/NumberOnly.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// NumberOnly + /// + [DataContract] + public partial class NumberOnly : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// justNumber. + public NumberOnly(decimal? justNumber = default(decimal?)) + { + this.JustNumber = justNumber; + } + + /// + /// Gets or Sets JustNumber + /// + [DataMember(Name="JustNumber", EmitDefaultValue=false)] + public decimal? JustNumber { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NumberOnly {\n"); + sb.Append(" JustNumber: ").Append(JustNumber).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as NumberOnly); + } + + /// + /// Returns true if NumberOnly instances are equal + /// + /// Instance of NumberOnly to be compared + /// Boolean + public bool Equals(NumberOnly input) + { + if (input == null) + return false; + + return + ( + this.JustNumber == input.JustNumber || + (this.JustNumber != null && + this.JustNumber.Equals(input.JustNumber)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.JustNumber != null) + hashCode = hashCode * 59 + this.JustNumber.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Order.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Order.cs new file mode 100644 index 0000000000..8499d39783 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Order.cs @@ -0,0 +1,241 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Order + /// + [DataContract] + public partial class Order : IEquatable, IValidatableObject + { + /// + /// Order Status + /// + /// Order Status + [JsonConverter(typeof(StringEnumConverter))] + public enum StatusEnum + { + /// + /// Enum Placed for value: placed + /// + [EnumMember(Value = "placed")] + Placed = 1, + + /// + /// Enum Approved for value: approved + /// + [EnumMember(Value = "approved")] + Approved = 2, + + /// + /// Enum Delivered for value: delivered + /// + [EnumMember(Value = "delivered")] + Delivered = 3 + + } + + /// + /// Order Status + /// + /// Order Status + [DataMember(Name="status", EmitDefaultValue=false)] + public StatusEnum? Status { get; set; } + /// + /// Initializes a new instance of the class. + /// + /// id. + /// petId. + /// quantity. + /// shipDate. + /// Order Status. + /// complete (default to false). + public Order(long? id = default(long?), long? petId = default(long?), int? quantity = default(int?), DateTime? shipDate = default(DateTime?), StatusEnum? status = default(StatusEnum?), bool? complete = false) + { + this.Id = id; + this.PetId = petId; + this.Quantity = quantity; + this.ShipDate = shipDate; + this.Status = status; + // use default value if no "complete" provided + if (complete == null) + { + this.Complete = false; + } + else + { + this.Complete = complete; + } + } + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + /// + /// Gets or Sets PetId + /// + [DataMember(Name="petId", EmitDefaultValue=false)] + public long? PetId { get; set; } + + /// + /// Gets or Sets Quantity + /// + [DataMember(Name="quantity", EmitDefaultValue=false)] + public int? Quantity { get; set; } + + /// + /// Gets or Sets ShipDate + /// + [DataMember(Name="shipDate", EmitDefaultValue=false)] + public DateTime? ShipDate { get; set; } + + + /// + /// Gets or Sets Complete + /// + [DataMember(Name="complete", EmitDefaultValue=false)] + public bool? Complete { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Order {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" PetId: ").Append(PetId).Append("\n"); + sb.Append(" Quantity: ").Append(Quantity).Append("\n"); + sb.Append(" ShipDate: ").Append(ShipDate).Append("\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + sb.Append(" Complete: ").Append(Complete).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Order); + } + + /// + /// Returns true if Order instances are equal + /// + /// Instance of Order to be compared + /// Boolean + public bool Equals(Order input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.PetId == input.PetId || + (this.PetId != null && + this.PetId.Equals(input.PetId)) + ) && + ( + this.Quantity == input.Quantity || + (this.Quantity != null && + this.Quantity.Equals(input.Quantity)) + ) && + ( + this.ShipDate == input.ShipDate || + (this.ShipDate != null && + this.ShipDate.Equals(input.ShipDate)) + ) && + ( + this.Status == input.Status || + (this.Status != null && + this.Status.Equals(input.Status)) + ) && + ( + this.Complete == input.Complete || + (this.Complete != null && + this.Complete.Equals(input.Complete)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.PetId != null) + hashCode = hashCode * 59 + this.PetId.GetHashCode(); + if (this.Quantity != null) + hashCode = hashCode * 59 + this.Quantity.GetHashCode(); + if (this.ShipDate != null) + hashCode = hashCode * 59 + this.ShipDate.GetHashCode(); + if (this.Status != null) + hashCode = hashCode * 59 + this.Status.GetHashCode(); + if (this.Complete != null) + hashCode = hashCode * 59 + this.Complete.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterComposite.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterComposite.cs new file mode 100644 index 0000000000..26c75891ed --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterComposite.cs @@ -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: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// OuterComposite + /// + [DataContract] + public partial class OuterComposite : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// myNumber. + /// myString. + /// myBoolean. + public OuterComposite(decimal? myNumber = default(decimal?), string myString = default(string), bool? myBoolean = default(bool?)) + { + this.MyNumber = myNumber; + this.MyString = myString; + this.MyBoolean = myBoolean; + } + + /// + /// Gets or Sets MyNumber + /// + [DataMember(Name="my_number", EmitDefaultValue=false)] + public decimal? MyNumber { get; set; } + + /// + /// Gets or Sets MyString + /// + [DataMember(Name="my_string", EmitDefaultValue=false)] + public string MyString { get; set; } + + /// + /// Gets or Sets MyBoolean + /// + [DataMember(Name="my_boolean", EmitDefaultValue=false)] + public bool? MyBoolean { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class OuterComposite {\n"); + sb.Append(" MyNumber: ").Append(MyNumber).Append("\n"); + sb.Append(" MyString: ").Append(MyString).Append("\n"); + sb.Append(" MyBoolean: ").Append(MyBoolean).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as OuterComposite); + } + + /// + /// Returns true if OuterComposite instances are equal + /// + /// Instance of OuterComposite to be compared + /// Boolean + public bool Equals(OuterComposite input) + { + if (input == null) + return false; + + return + ( + this.MyNumber == input.MyNumber || + (this.MyNumber != null && + this.MyNumber.Equals(input.MyNumber)) + ) && + ( + this.MyString == input.MyString || + (this.MyString != null && + this.MyString.Equals(input.MyString)) + ) && + ( + this.MyBoolean == input.MyBoolean || + (this.MyBoolean != null && + this.MyBoolean.Equals(input.MyBoolean)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.MyNumber != null) + hashCode = hashCode * 59 + this.MyNumber.GetHashCode(); + if (this.MyString != null) + hashCode = hashCode * 59 + this.MyString.GetHashCode(); + if (this.MyBoolean != null) + hashCode = hashCode * 59 + this.MyBoolean.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterEnum.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterEnum.cs new file mode 100644 index 0000000000..ad5b4ae6d6 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/OuterEnum.cs @@ -0,0 +1,56 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Defines OuterEnum + /// + + [JsonConverter(typeof(StringEnumConverter))] + + public enum OuterEnum + { + /// + /// Enum Placed for value: placed + /// + [EnumMember(Value = "placed")] + Placed = 1, + + /// + /// Enum Approved for value: approved + /// + [EnumMember(Value = "approved")] + Approved = 2, + + /// + /// Enum Delivered for value: delivered + /// + [EnumMember(Value = "delivered")] + Delivered = 3 + + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Pet.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Pet.cs new file mode 100644 index 0000000000..976b837504 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Pet.cs @@ -0,0 +1,254 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Pet + /// + [DataContract] + public partial class Pet : IEquatable, IValidatableObject + { + /// + /// pet status in the store + /// + /// pet status in the store + [JsonConverter(typeof(StringEnumConverter))] + public enum StatusEnum + { + /// + /// Enum Available for value: available + /// + [EnumMember(Value = "available")] + Available = 1, + + /// + /// Enum Pending for value: pending + /// + [EnumMember(Value = "pending")] + Pending = 2, + + /// + /// Enum Sold for value: sold + /// + [EnumMember(Value = "sold")] + Sold = 3 + + } + + /// + /// pet status in the store + /// + /// pet status in the store + [DataMember(Name="status", EmitDefaultValue=false)] + public StatusEnum? Status { get; set; } + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected Pet() { } + /// + /// Initializes a new instance of the class. + /// + /// id. + /// category. + /// name (required). + /// photoUrls (required). + /// tags. + /// pet status in the store. + public Pet(long? id = default(long?), Category category = default(Category), string name = default(string), List photoUrls = default(List), List tags = default(List), StatusEnum? status = default(StatusEnum?)) + { + // to ensure "name" is required (not null) + if (name == null) + { + throw new InvalidDataException("name is a required property for Pet and cannot be null"); + } + else + { + this.Name = name; + } + // to ensure "photoUrls" is required (not null) + if (photoUrls == null) + { + throw new InvalidDataException("photoUrls is a required property for Pet and cannot be null"); + } + else + { + this.PhotoUrls = photoUrls; + } + this.Id = id; + this.Category = category; + this.Tags = tags; + this.Status = status; + } + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + /// + /// Gets or Sets Category + /// + [DataMember(Name="category", EmitDefaultValue=false)] + public Category Category { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + /// + /// Gets or Sets PhotoUrls + /// + [DataMember(Name="photoUrls", EmitDefaultValue=false)] + public List PhotoUrls { get; set; } + + /// + /// Gets or Sets Tags + /// + [DataMember(Name="tags", EmitDefaultValue=false)] + public List Tags { get; set; } + + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Pet {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Category: ").Append(Category).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append(" PhotoUrls: ").Append(PhotoUrls).Append("\n"); + sb.Append(" Tags: ").Append(Tags).Append("\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Pet); + } + + /// + /// Returns true if Pet instances are equal + /// + /// Instance of Pet to be compared + /// Boolean + public bool Equals(Pet input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.Category == input.Category || + (this.Category != null && + this.Category.Equals(input.Category)) + ) && + ( + this.Name == input.Name || + (this.Name != null && + this.Name.Equals(input.Name)) + ) && + ( + this.PhotoUrls == input.PhotoUrls || + this.PhotoUrls != null && + this.PhotoUrls.SequenceEqual(input.PhotoUrls) + ) && + ( + this.Tags == input.Tags || + this.Tags != null && + this.Tags.SequenceEqual(input.Tags) + ) && + ( + this.Status == input.Status || + (this.Status != null && + this.Status.Equals(input.Status)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.Category != null) + hashCode = hashCode * 59 + this.Category.GetHashCode(); + if (this.Name != null) + hashCode = hashCode * 59 + this.Name.GetHashCode(); + if (this.PhotoUrls != null) + hashCode = hashCode * 59 + this.PhotoUrls.GetHashCode(); + if (this.Tags != null) + hashCode = hashCode * 59 + this.Tags.GetHashCode(); + if (this.Status != null) + hashCode = hashCode * 59 + this.Status.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs new file mode 100644 index 0000000000..622c98b1b7 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs @@ -0,0 +1,139 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// ReadOnlyFirst + /// + [DataContract] + public partial class ReadOnlyFirst : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// baz. + public ReadOnlyFirst(string baz = default(string)) + { + this.Baz = baz; + } + + /// + /// Gets or Sets Bar + /// + [DataMember(Name="bar", EmitDefaultValue=false)] + public string Bar { get; private set; } + + /// + /// Gets or Sets Baz + /// + [DataMember(Name="baz", EmitDefaultValue=false)] + public string Baz { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class ReadOnlyFirst {\n"); + sb.Append(" Bar: ").Append(Bar).Append("\n"); + sb.Append(" Baz: ").Append(Baz).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as ReadOnlyFirst); + } + + /// + /// Returns true if ReadOnlyFirst instances are equal + /// + /// Instance of ReadOnlyFirst to be compared + /// Boolean + public bool Equals(ReadOnlyFirst input) + { + if (input == null) + return false; + + return + ( + this.Bar == input.Bar || + (this.Bar != null && + this.Bar.Equals(input.Bar)) + ) && + ( + this.Baz == input.Baz || + (this.Baz != null && + this.Baz.Equals(input.Baz)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Bar != null) + hashCode = hashCode * 59 + this.Bar.GetHashCode(); + if (this.Baz != null) + hashCode = hashCode * 59 + this.Baz.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Return.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Return.cs new file mode 100644 index 0000000000..c8943a09bc --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Return.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Model for testing reserved words + /// + [DataContract] + public partial class Return : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// _return. + public Return(int? _return = default(int?)) + { + this._Return = _return; + } + + /// + /// Gets or Sets _Return + /// + [DataMember(Name="return", EmitDefaultValue=false)] + public int? _Return { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Return {\n"); + sb.Append(" _Return: ").Append(_Return).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Return); + } + + /// + /// Returns true if Return instances are equal + /// + /// Instance of Return to be compared + /// Boolean + public bool Equals(Return input) + { + if (input == null) + return false; + + return + ( + this._Return == input._Return || + (this._Return != null && + this._Return.Equals(input._Return)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this._Return != null) + hashCode = hashCode * 59 + this._Return.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/SpecialModelName.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/SpecialModelName.cs new file mode 100644 index 0000000000..540d5c331d --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/SpecialModelName.cs @@ -0,0 +1,125 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// SpecialModelName + /// + [DataContract] + public partial class SpecialModelName : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// specialPropertyName. + public SpecialModelName(long? specialPropertyName = default(long?)) + { + this.SpecialPropertyName = specialPropertyName; + } + + /// + /// Gets or Sets SpecialPropertyName + /// + [DataMember(Name="$special[property.name]", EmitDefaultValue=false)] + public long? SpecialPropertyName { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class SpecialModelName {\n"); + sb.Append(" SpecialPropertyName: ").Append(SpecialPropertyName).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as SpecialModelName); + } + + /// + /// Returns true if SpecialModelName instances are equal + /// + /// Instance of SpecialModelName to be compared + /// Boolean + public bool Equals(SpecialModelName input) + { + if (input == null) + return false; + + return + ( + this.SpecialPropertyName == input.SpecialPropertyName || + (this.SpecialPropertyName != null && + this.SpecialPropertyName.Equals(input.SpecialPropertyName)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.SpecialPropertyName != null) + hashCode = hashCode * 59 + this.SpecialPropertyName.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/StringBooleanMap.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/StringBooleanMap.cs new file mode 100644 index 0000000000..65457a6ece --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/StringBooleanMap.cs @@ -0,0 +1,111 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// StringBooleanMap + /// + [DataContract] + public partial class StringBooleanMap : Dictionary, IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + public StringBooleanMap() : base() + { + } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class StringBooleanMap {\n"); + sb.Append(" ").Append(base.ToString().Replace("\n", "\n ")).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as StringBooleanMap); + } + + /// + /// Returns true if StringBooleanMap instances are equal + /// + /// Instance of StringBooleanMap to be compared + /// Boolean + public bool Equals(StringBooleanMap input) + { + if (input == null) + return false; + + return base.Equals(input); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = base.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Tag.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Tag.cs new file mode 100644 index 0000000000..570df7658a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/Tag.cs @@ -0,0 +1,141 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// Tag + /// + [DataContract] + public partial class Tag : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// id. + /// name. + public Tag(long? id = default(long?), string name = default(string)) + { + this.Id = id; + this.Name = name; + } + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + /// + /// Gets or Sets Name + /// + [DataMember(Name="name", EmitDefaultValue=false)] + public string Name { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Tag {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Name: ").Append(Name).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Tag); + } + + /// + /// Returns true if Tag instances are equal + /// + /// Instance of Tag to be compared + /// Boolean + public bool Equals(Tag input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.Name == input.Name || + (this.Name != null && + this.Name.Equals(input.Name)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.Name != null) + hashCode = hashCode * 59 + this.Name.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/User.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/User.cs new file mode 100644 index 0000000000..06728fe648 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Model/User.cs @@ -0,0 +1,238 @@ +/* + * 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 System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; + +namespace Org.OpenAPITools.Model +{ + /// + /// User + /// + [DataContract] + public partial class User : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// id. + /// username. + /// firstName. + /// lastName. + /// email. + /// password. + /// phone. + /// User Status. + public User(long? id = default(long?), string username = default(string), string firstName = default(string), string lastName = default(string), string email = default(string), string password = default(string), string phone = default(string), int? userStatus = default(int?)) + { + this.Id = id; + this.Username = username; + this.FirstName = firstName; + this.LastName = lastName; + this.Email = email; + this.Password = password; + this.Phone = phone; + this.UserStatus = userStatus; + } + + /// + /// Gets or Sets Id + /// + [DataMember(Name="id", EmitDefaultValue=false)] + public long? Id { get; set; } + + /// + /// Gets or Sets Username + /// + [DataMember(Name="username", EmitDefaultValue=false)] + public string Username { get; set; } + + /// + /// Gets or Sets FirstName + /// + [DataMember(Name="firstName", EmitDefaultValue=false)] + public string FirstName { get; set; } + + /// + /// Gets or Sets LastName + /// + [DataMember(Name="lastName", EmitDefaultValue=false)] + public string LastName { get; set; } + + /// + /// Gets or Sets Email + /// + [DataMember(Name="email", EmitDefaultValue=false)] + public string Email { get; set; } + + /// + /// Gets or Sets Password + /// + [DataMember(Name="password", EmitDefaultValue=false)] + public string Password { get; set; } + + /// + /// Gets or Sets Phone + /// + [DataMember(Name="phone", EmitDefaultValue=false)] + public string Phone { get; set; } + + /// + /// User Status + /// + /// User Status + [DataMember(Name="userStatus", EmitDefaultValue=false)] + public int? UserStatus { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class User {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Username: ").Append(Username).Append("\n"); + sb.Append(" FirstName: ").Append(FirstName).Append("\n"); + sb.Append(" LastName: ").Append(LastName).Append("\n"); + sb.Append(" Email: ").Append(Email).Append("\n"); + sb.Append(" Password: ").Append(Password).Append("\n"); + sb.Append(" Phone: ").Append(Phone).Append("\n"); + sb.Append(" UserStatus: ").Append(UserStatus).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as User); + } + + /// + /// Returns true if User instances are equal + /// + /// Instance of User to be compared + /// Boolean + public bool Equals(User input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.Username == input.Username || + (this.Username != null && + this.Username.Equals(input.Username)) + ) && + ( + this.FirstName == input.FirstName || + (this.FirstName != null && + this.FirstName.Equals(input.FirstName)) + ) && + ( + this.LastName == input.LastName || + (this.LastName != null && + this.LastName.Equals(input.LastName)) + ) && + ( + this.Email == input.Email || + (this.Email != null && + this.Email.Equals(input.Email)) + ) && + ( + this.Password == input.Password || + (this.Password != null && + this.Password.Equals(input.Password)) + ) && + ( + this.Phone == input.Phone || + (this.Phone != null && + this.Phone.Equals(input.Phone)) + ) && + ( + this.UserStatus == input.UserStatus || + (this.UserStatus != null && + this.UserStatus.Equals(input.UserStatus)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.Username != null) + hashCode = hashCode * 59 + this.Username.GetHashCode(); + if (this.FirstName != null) + hashCode = hashCode * 59 + this.FirstName.GetHashCode(); + if (this.LastName != null) + hashCode = hashCode * 59 + this.LastName.GetHashCode(); + if (this.Email != null) + hashCode = hashCode * 59 + this.Email.GetHashCode(); + if (this.Password != null) + hashCode = hashCode * 59 + this.Password.GetHashCode(); + if (this.Phone != null) + hashCode = hashCode * 59 + this.Phone.GetHashCode(); + if (this.UserStatus != null) + hashCode = hashCode * 59 + this.UserStatus.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.csproj b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.csproj new file mode 100644 index 0000000000..af22747275 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.csproj @@ -0,0 +1,78 @@ + + + + + + Debug + AnyCPU + {321C8C3F-0156-40C1-AE42-D59761FB9B6C} + Library + Properties + Org.OpenAPITools + Org.OpenAPITools + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + ..\..\vendor\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + + + $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + ..\..\vendor\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll + + + $(SolutionDir)\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + ..\..\vendor\RestSharp.105.1.0\lib\net45\RestSharp.dll + + + + + + + + + + + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.nuspec b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.nuspec new file mode 100644 index 0000000000..c49c57e440 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Org.OpenAPITools.nuspec @@ -0,0 +1,41 @@ + + + + + $id$ + OpenAPI Library + + + $version$ + + + $author$ + + + $author$ + false + false + + + A library generated from a OpenAPI doc + http://www.apache.org/licenses/LICENSE-2.0.html + + + + + + + + + + + + + + + + + + diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Properties/AssemblyInfo.cs b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..f3fef5199a --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenAPI Library")] +[assembly: AssemblyDescription("A library generated from a OpenAPI doc")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OpenAPI")] +[assembly: AssemblyProduct("OpenAPILibrary")] +[assembly: AssemblyCopyright("No Copyright")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0")] +[assembly: AssemblyFileVersion("1.0.0")] diff --git a/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/packages.config b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/packages.config new file mode 100644 index 0000000000..3caf34e0d7 --- /dev/null +++ b/samples/client/petstore/csharp-refactor/OpenAPIClient/src/Org.OpenAPITools/packages.config @@ -0,0 +1,6 @@ + + + + + +

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