diff --git a/bin/swift5-petstore-all.sh b/bin/swift5-petstore-all.sh
index bce216fcb42..a4b54f49def 100755
--- a/bin/swift5-petstore-all.sh
+++ b/bin/swift5-petstore-all.sh
@@ -9,4 +9,4 @@
./bin/swift5-petstore-urlsession.sh
./bin/swift5-petstore-alamofire.sh
./bin/swift5-petstore-combine.sh
-
\ No newline at end of file
+./bin/swift5-petstore-readonlyProperties.sh
diff --git a/bin/swift5-petstore-readOnlyProperties.json b/bin/swift5-petstore-readOnlyProperties.json
new file mode 100644
index 00000000000..3993a3c26aa
--- /dev/null
+++ b/bin/swift5-petstore-readOnlyProperties.json
@@ -0,0 +1,7 @@
+{
+ "podSummary": "PetstoreClient",
+ "podHomepage": "https://github.com/openapitools/openapi-generator",
+ "podAuthors": "",
+ "projectName": "PetstoreClient",
+ "readonlyProperties": true
+}
diff --git a/bin/swift5-petstore-readOnlyProperties.sh b/bin/swift5-petstore-readOnlyProperties.sh
new file mode 100755
index 00000000000..fe838af1d3c
--- /dev/null
+++ b/bin/swift5-petstore-readOnlyProperties.sh
@@ -0,0 +1,42 @@
+#!/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} -Xmx1024M -DloggerPath=conf/log4j.properties"
+ags="generate -t modules/openapi-generator/src/main/resources/swift5 -i modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml -g swift5 -c ./bin/swift5-petstore-readonlyProperties.json -o samples/client/petstore/swift5/readonlyProperties --generate-alias-as-model $@"
+
+java $JAVA_OPTS -jar $executable $ags
+
+if type "xcodegen" > /dev/null 2>&1; then
+ cd samples/client/petstore/swift5/readonlyProperties
+ xcodegen generate
+fi
+
+if type "swiftlint" > /dev/null 2>&1; then
+ cd samples/client/petstore/swift5/readonlyProperties
+ swiftlint autocorrect
+fi
\ No newline at end of file
diff --git a/bin/windows/swift5-petstore-all.bat b/bin/windows/swift5-petstore-all.bat
index 1daaa1fee76..9d656b1437b 100755
--- a/bin/windows/swift5-petstore-all.bat
+++ b/bin/windows/swift5-petstore-all.bat
@@ -7,3 +7,4 @@ call .\bin\windows\swift5-petstore-nonPublicApi.bat
call .\bin\windows\swift5-petstore-urlsession.bat
call .\bin\windows\swift5-petstore-alamofire.bat
call .\bin\windows\swift5-petstore-combine.bat
+call .\bin\windows\swift5-petstore-readonlyProperties.bat
diff --git a/bin/windows/swift5-petstore-readonlyProperties.bat b/bin/windows/swift5-petstore-readonlyProperties.bat
new file mode 100644
index 00000000000..cc297bd1a4f
--- /dev/null
+++ b/bin/windows/swift5-petstore-readonlyProperties.bat
@@ -0,0 +1,10 @@
+set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar
+
+If Not Exist %executable% (
+ mvn clean package
+)
+
+REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M
+set ags=generate -i modules\openapi-generator\src\test\resources\2_0\swift\petstore-with-fake-endpoints-models-for-testing.yaml -g swift5 -c bin\swift5-petstore-readonlyProperties.json -o samples\client\petstore\swift5\readonlyProperties
+
+java %JAVA_OPTS% -jar %executable% %ags%
diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md
index acd97596e6a..9b172cdf785 100644
--- a/docs/generators/swift5.md
+++ b/docs/generators/swift5.md
@@ -26,6 +26,7 @@ sidebar_label: swift5
|podVersion|Version used for Podspec| |null|
|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false|
|projectName|Project name in Xcode| |null|
+|readonlyProperties|Make properties readonly (default: false)| |null|
|responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null|
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java
index b660a83dcb2..445069455d4 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java
@@ -53,6 +53,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
public static final String POD_DESCRIPTION = "podDescription";
public static final String POD_SCREENSHOTS = "podScreenshots";
public static final String POD_DOCUMENTATION_URL = "podDocumentationURL";
+ public static final String READONLY_PROPERTIES = "readonlyProperties";
public static final String SWIFT_USE_API_NAMESPACE = "swiftUseApiNamespace";
public static final String DEFAULT_POD_AUTHORS = "OpenAPI Generator";
public static final String LENIENT_TYPE_CAST = "lenientTypeCast";
@@ -67,6 +68,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
protected boolean nonPublicApi = false;
protected boolean objcCompatible = false;
protected boolean lenientTypeCast = false;
+ protected boolean readonlyProperties = false;
protected boolean swiftUseApiNamespace;
protected String[] responseAs = new String[0];
protected String sourceFolder = "Classes" + File.separator + "OpenAPIs";
@@ -237,6 +239,8 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
cliOptions.add(new CliOption(POD_SCREENSHOTS, "Screenshots used for Podspec"));
cliOptions.add(new CliOption(POD_DOCUMENTATION_URL,
"Documentation URL used for Podspec"));
+ cliOptions.add(new CliOption(READONLY_PROPERTIES, "Make properties "
+ + "readonly (default: false)"));
cliOptions.add(new CliOption(SWIFT_USE_API_NAMESPACE,
"Flag to make all the API classes inner-class "
+ "of {{projectName}}API"));
@@ -392,6 +396,13 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put("useCombine", true);
}
+ // Setup readonlyProperties option, which declares properties so they can only
+ // be set at initialization
+ if (additionalProperties.containsKey(READONLY_PROPERTIES)) {
+ setReadonlyProperties(convertPropertyToBooleanAndWriteBack(READONLY_PROPERTIES));
+ }
+ additionalProperties.put(READONLY_PROPERTIES, readonlyProperties);
+
// Setup swiftUseApiNamespace option, which makes all the API
// classes inner-class of {{projectName}}API
if (additionalProperties.containsKey(SWIFT_USE_API_NAMESPACE)) {
@@ -777,6 +788,10 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
this.lenientTypeCast = lenientTypeCast;
}
+ public void setReadonlyProperties(boolean readonlyProperties) {
+ this.readonlyProperties = readonlyProperties;
+ }
+
public void setResponseAs(String[] responseAs) {
this.responseAs = responseAs;
}
diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache
index 25d7881c05a..ca3492aba47 100644
--- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache
+++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache
@@ -9,11 +9,11 @@
{{#allVars}}
{{#isEnum}}
{{#description}}/** {{description}} */
- {{/description}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var {{name}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
+ {{/description}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{name}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
{{/isEnum}}
{{^isEnum}}
{{#description}}/** {{description}} */
- {{/description}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var {{name}}: {{{datatype}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
+ {{/description}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{name}}: {{{datatype}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
{{#objcCompatible}}
{{#vendorExtensions.x-swift-optional-scalar}}
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var {{name}}Num: NSNumber? {
@@ -34,7 +34,7 @@
}
{{/hasVars}}
{{#additionalPropertiesType}}
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var additionalProperties: [String:{{{additionalPropertiesType}}}] = [:]
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var additionalProperties: [String:{{{additionalPropertiesType}}}] = [:]
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} subscript(key: String) -> {{{additionalPropertiesType}}}? {
get {
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java
index d5cd8cbe38e..58b3ae01fd3 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java
@@ -43,6 +43,7 @@ public class Swift5OptionsProvider implements OptionsProvider {
public static final String POD_DESCRIPTION_VALUE = "podDescription";
public static final String POD_SCREENSHOTS_VALUE = "podScreenshots";
public static final String POD_DOCUMENTATION_URL_VALUE = "podDocumentationURL";
+ public static final String READONLY_PROPERTIES_VALUE = "false";
public static final String SWIFT_USE_API_NAMESPACE_VALUE = "swiftUseApiNamespace";
public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true";
@@ -74,6 +75,7 @@ public class Swift5OptionsProvider implements OptionsProvider {
.put(Swift5ClientCodegen.POD_DESCRIPTION, POD_DESCRIPTION_VALUE)
.put(Swift5ClientCodegen.POD_SCREENSHOTS, POD_SCREENSHOTS_VALUE)
.put(Swift5ClientCodegen.POD_DOCUMENTATION_URL, POD_DOCUMENTATION_URL_VALUE)
+ .put(Swift5ClientCodegen.READONLY_PROPERTIES, READONLY_PROPERTIES_VALUE)
.put(Swift5ClientCodegen.SWIFT_USE_API_NAMESPACE, SWIFT_USE_API_NAMESPACE_VALUE)
.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true")
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java
index 3902711776a..04ec85ecfbe 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java
@@ -20,6 +20,7 @@ package org.openapitools.codegen.swift5;
import org.openapitools.codegen.AbstractOptionsTest;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.languages.Swift5ClientCodegen;
+import org.openapitools.codegen.options.Swift4OptionsProvider;
import org.openapitools.codegen.options.Swift5OptionsProvider;
import static org.mockito.Mockito.mock;
@@ -47,5 +48,6 @@ public class Swift5OptionsTest extends AbstractOptionsTest {
verify(clientCodegen).setObjcCompatible(Boolean.parseBoolean(Swift5OptionsProvider.OBJC_COMPATIBLE_VALUE));
verify(clientCodegen).setLenientTypeCast(Boolean.parseBoolean(Swift5OptionsProvider.LENIENT_TYPE_CAST_VALUE));
verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(Swift5OptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE));
+ verify(clientCodegen).setReadonlyProperties(Boolean.valueOf(Swift5OptionsProvider.READONLY_PROPERTIES_VALUE));
}
}
diff --git a/samples/client/petstore/swift5/readonlyProperties/.gitignore b/samples/client/petstore/swift5/readonlyProperties/.gitignore
new file mode 100644
index 00000000000..5e5d5cebcf4
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/.gitignore
@@ -0,0 +1,63 @@
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+## Build generated
+build/
+DerivedData
+
+## Various settings
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+
+## Other
+*.xccheckout
+*.moved-aside
+*.xcuserstate
+*.xcscmblueprint
+
+## Obj-C/Swift specific
+*.hmap
+*.ipa
+
+## Playgrounds
+timeline.xctimeline
+playground.xcworkspace
+
+# Swift Package Manager
+#
+# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
+# Packages/
+.build/
+
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# Pods/
+
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
+
+fastlane/report.xml
+fastlane/screenshots
diff --git a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator-ignore b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator-ignore
new file mode 100644
index 00000000000..7484ee590a3
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION
new file mode 100644
index 00000000000..b5d898602c2
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION
@@ -0,0 +1 @@
+4.3.1-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/readonlyProperties/Cartfile b/samples/client/petstore/swift5/readonlyProperties/Cartfile
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/Cartfile
@@ -0,0 +1 @@
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/Info.plist b/samples/client/petstore/swift5/readonlyProperties/Info.plist
new file mode 100644
index 00000000000..323e5ecfc42
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/Package.swift b/samples/client/petstore/swift5/readonlyProperties/Package.swift
new file mode 100644
index 00000000000..96dfff54edf
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/Package.swift
@@ -0,0 +1,31 @@
+// swift-tools-version:5.0
+
+import PackageDescription
+
+let package = Package(
+ name: "PetstoreClient",
+ platforms: [
+ .iOS(.v9),
+ .macOS(.v10_11),
+ .tvOS(.v9),
+ .watchOS(.v3)
+ ],
+ products: [
+ // Products define the executables and libraries produced by a package, and make them visible to other packages.
+ .library(
+ name: "PetstoreClient",
+ targets: ["PetstoreClient"])
+ ],
+ dependencies: [
+ // Dependencies declare other packages that this package depends on.
+ ],
+ targets: [
+ // Targets are the basic building blocks of a package. A target can define a module or a test suite.
+ // Targets can depend on other targets in this package, and on products in packages which this package depends on.
+ .target(
+ name: "PetstoreClient",
+ dependencies: [],
+ path: "PetstoreClient/Classes"
+ )
+ ]
+)
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec
new file mode 100644
index 00000000000..b61285f6b25
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec
@@ -0,0 +1,14 @@
+Pod::Spec.new do |s|
+ s.name = 'PetstoreClient'
+ s.ios.deployment_target = '9.0'
+ s.osx.deployment_target = '10.11'
+ s.tvos.deployment_target = '9.0'
+ s.watchos.deployment_target = '3.0'
+ s.version = '1.0.0'
+ s.source = { :git => 'git@github.com:OpenAPITools/openapi-generator.git', :tag => 'v1.0.0' }
+ s.authors = ''
+ s.license = 'Proprietary'
+ s.homepage = 'https://github.com/openapitools/openapi-generator'
+ s.summary = 'PetstoreClient'
+ s.source_files = 'PetstoreClient/Classes/**/*.swift'
+end
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.pbxproj
new file mode 100644
index 00000000000..6f8918eb338
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.pbxproj
@@ -0,0 +1,536 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 51;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 0299339D13C3571C4C57368A /* ApiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8E7B833748B4F0C7CDA90C6 /* ApiResponse.swift */; };
+ 081C0B80A989B1AAF2665121 /* MapTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7986861626C2B1CB49AD7000 /* MapTest.swift */; };
+ 0C1E4C682F2D0AF7D9E431EE /* Dog.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C3E1129526A353B963EFD7 /* Dog.swift */; };
+ 0E6932F1C55BA6880693C478 /* Order.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B2E9EF856E89FEAA359A3A /* Order.swift */; };
+ 1E6C7C7F271A802DF8099330 /* APIHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897716962D472FE162B723CB /* APIHelper.swift */; };
+ 248F2F0F29E8FDAE9CAD64C5 /* AdditionalPropertiesClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 396DEF3156BA0D12D0FC5C3C /* AdditionalPropertiesClass.swift */; };
+ 269E3103C458C78EA5726EE2 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8C298FC8929DCB369053F11 /* Extensions.swift */; };
+ 294CDFA409BC369C0FDC5FB3 /* SpecialModelName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 386FD590658E90509C121118 /* SpecialModelName.swift */; };
+ 2B441CDFFFDDB343C04F5375 /* Animal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95568E7C35F119EB4A12B498 /* Animal.swift */; };
+ 2C29D5B60E00DDA3878F1BDE /* Pet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFEB4C6C257B3BB3CEA36D1 /* Pet.swift */; };
+ 31DFF71D8CCCA0D2D2F8AC90 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5565A447062C7B8F695F451 /* User.swift */; };
+ 34C26979F4678B5B579D26E8 /* FakeClassnameTags123API.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42354B407EC173BEB54E042 /* FakeClassnameTags123API.swift */; };
+ 3691B017D3AA18404A563C67 /* ArrayOfNumberOnly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65BB72353DA24536A9049BE /* ArrayOfNumberOnly.swift */; };
+ 37DEADD6CD0496690725B8A7 /* Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AD994DFAA0DA93C188A4DBA /* Name.swift */; };
+ 40E3027D2E38D8329C6AB01F /* APIs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DF825B8F3BADA2B2537D17 /* APIs.swift */; };
+ 41A491E9B577C510F927D126 /* OuterEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15008AABC804EB6FB4CDAC6 /* OuterEnum.swift */; };
+ 45B3B29D7A62049F824751F8 /* AnimalFarm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D22BE01748F51106DE02332 /* AnimalFarm.swift */; };
+ 4A344DF7ECE721B4BBEDCB4A /* CatAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AD0F94F512DFBC09F9CC79A /* CatAllOf.swift */; };
+ 4B4BE77747413A9188CDABD2 /* ArrayOfArrayOfNumberOnly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B1B8B838B5D9D312F2002EB /* ArrayOfArrayOfNumberOnly.swift */; };
+ 555DEA47352B42E49082922B /* NumberOnly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8E0B16084741FCB82389F58 /* NumberOnly.swift */; };
+ 5695497F5DBF6C08842755A3 /* TypeHolderDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC76F6D4D2AA8084B7EB50E /* TypeHolderDefault.swift */; };
+ 61322FC4325F1A4FF24ACA48 /* EnumArrays.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10503995D9EFD031A2EFB576 /* EnumArrays.swift */; };
+ 64C48E3658CF53EBE8AF82F9 /* UserAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C8D5F382979854D47F18DB1 /* UserAPI.swift */; };
+ 6B638A04B34C82B2091D6EDD /* FormatTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3156CE41C001C80379B84BDB /* FormatTest.swift */; };
+ 6FBD978F4D1ED92E7071FFBB /* CodableHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A6F6BB2152ACEE1416D44A /* CodableHelper.swift */; };
+ 72547ECFB451A509409311EE /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28A444949BBC254798C3B3DD /* Configuration.swift */; };
+ 72CE544C52BB33778D1B89B8 /* DogAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = A21A69C8402A60E01116ABBD /* DogAllOf.swift */; };
+ 7441BBA84C31E06400338F89 /* ClassModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C30827D8EAF8EA684E7BCEA /* ClassModel.swift */; };
+ 7588B7E2960253174ADCCF16 /* JSONEncodingHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */; };
+ 86DE714469BE8BA28AFF710F /* HasOnlyReadOnly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7FBC641752D2E13B150973 /* HasOnlyReadOnly.swift */; };
+ 914F4D1FCB17773C067C4E68 /* ReadOnlyFirst.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FD42727E001E799E458C292 /* ReadOnlyFirst.swift */; };
+ 922BDADAB291907A7FD14314 /* OuterComposite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4E0AD8F60A91F72C7687560 /* OuterComposite.swift */; };
+ 97F7B85BF07A325EEBF92C93 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3933D3B2A3AC4577094D0C23 /* File.swift */; };
+ 9CA19AA4483F6EB50270A81E /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6070F581E611FF44AFD40A /* List.swift */; };
+ 9CF06ACDA32CB0C3E74E435C /* Model200Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82A2C3DC2235F0114C2B08E5 /* Model200Response.swift */; };
+ 9D22720B1B12BE43D3B45ADE /* JSONDataEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10A7A27EE12A4DFEA1C0EE35 /* JSONDataEncoding.swift */; };
+ 9DA1C6F8B4D6C8595F28C098 /* EnumTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD60AEA646791E0EDE885DE1 /* EnumTest.swift */; };
+ A3E16915AA7FD644C4FE162E /* URLSessionImplementations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F49B24B6239C324722572C /* URLSessionImplementations.swift */; };
+ A6E50CC6845FE58D8C236253 /* Return.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81447828475F76C5CF4F08A /* Return.swift */; };
+ A6E5A5629495DB0ED672B06F /* PetAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A019F500E546A3292CE716A /* PetAPI.swift */; };
+ A85E190556818FFA79896E92 /* ArrayTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1A0379CDFC55705AE76C998 /* ArrayTest.swift */; };
+ ACF3037926301D4D6E848745 /* EnumClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C97AE6ACA1E5FB88F5BAA /* EnumClass.swift */; };
+ AD3A3107C12F2634CD22163B /* SynchronizedDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */; };
+ AD594BFB99E31A5E07579237 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = A913A57E72D723632E9A718F /* Client.swift */; };
+ B301DB1B80F37C757550AA17 /* MixedPropertiesAndAdditionalPropertiesClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD714C7CC59BDD18DE8DF4E /* MixedPropertiesAndAdditionalPropertiesClass.swift */; };
+ B3E35FE2773D4A8BA15CFA88 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2896F8BFD1AA2965C8A3015 /* Tag.swift */; };
+ B637B9432565A6A8E7C73E7F /* OpenISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD7A1702ACD8737DED6588CD /* OpenISO8601DateFormatter.swift */; };
+ BB1F3C6D50B8F0A8CC4F1749 /* Capitalization.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B38FA00A494D13F4C382A3 /* Capitalization.swift */; };
+ CA9B9B19882EA044EAD0B359 /* AnotherFakeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DF24D2714B9C4CF14146E88 /* AnotherFakeAPI.swift */; };
+ CB68ABDBAADAF6B8D7B93A5D /* StoreAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53274D99BBDE1B79BF3521C /* StoreAPI.swift */; };
+ D3BAB7C7A607392CA838C580 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8699F7966F748ED026A6FB4C /* Models.swift */; };
+ D95A5F83AAA7D5C95A29AB83 /* Cat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 212AA914B7F1793A4E32C119 /* Cat.swift */; };
+ DDBD4C0FBA3CD6A4DA3DF376 /* FakeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E00950725DC44436C5E238C /* FakeAPI.swift */; };
+ DDF1D589267D56D9BED3C6E5 /* FileSchemaTestClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3666552AA854DAF9C480A3 /* FileSchemaTestClass.swift */; };
+ E8A58C6414E88AF3EAE45B69 /* Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2985D01F8D60A4B1925C69 /* Category.swift */; };
+ EDFC6C5121A43997014049CB /* StringBooleanMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B4DEBABEFE140768CFB70B /* StringBooleanMap.swift */; };
+ FECA2E8C9D0BDFEC459E8996 /* TypeHolderExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B65C66C97F082718DDD703 /* TypeHolderExample.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 02A6F6BB2152ACEE1416D44A /* CodableHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableHelper.swift; sourceTree = ""; };
+ 10503995D9EFD031A2EFB576 /* EnumArrays.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumArrays.swift; sourceTree = ""; };
+ 10A7A27EE12A4DFEA1C0EE35 /* JSONDataEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONDataEncoding.swift; sourceTree = ""; };
+ 11F49B24B6239C324722572C /* URLSessionImplementations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionImplementations.swift; sourceTree = ""; };
+ 164AD6EC9C4CCF634D7C4590 /* PetstoreClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PetstoreClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 19B65C66C97F082718DDD703 /* TypeHolderExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypeHolderExample.swift; sourceTree = ""; };
+ 212AA914B7F1793A4E32C119 /* Cat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cat.swift; sourceTree = ""; };
+ 27B2E9EF856E89FEAA359A3A /* Order.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Order.swift; sourceTree = ""; };
+ 28A444949BBC254798C3B3DD /* Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; };
+ 3156CE41C001C80379B84BDB /* FormatTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormatTest.swift; sourceTree = ""; };
+ 35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONEncodingHelper.swift; sourceTree = ""; };
+ 37DF825B8F3BADA2B2537D17 /* APIs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIs.swift; sourceTree = ""; };
+ 386FD590658E90509C121118 /* SpecialModelName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecialModelName.swift; sourceTree = ""; };
+ 3933D3B2A3AC4577094D0C23 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; };
+ 396DEF3156BA0D12D0FC5C3C /* AdditionalPropertiesClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalPropertiesClass.swift; sourceTree = ""; };
+ 3AD0F94F512DFBC09F9CC79A /* CatAllOf.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatAllOf.swift; sourceTree = ""; };
+ 3C30827D8EAF8EA684E7BCEA /* ClassModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClassModel.swift; sourceTree = ""; };
+ 47B4DEBABEFE140768CFB70B /* StringBooleanMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringBooleanMap.swift; sourceTree = ""; };
+ 4B2C97AE6ACA1E5FB88F5BAA /* EnumClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumClass.swift; sourceTree = ""; };
+ 4B3666552AA854DAF9C480A3 /* FileSchemaTestClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSchemaTestClass.swift; sourceTree = ""; };
+ 4C7FBC641752D2E13B150973 /* HasOnlyReadOnly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HasOnlyReadOnly.swift; sourceTree = ""; };
+ 5AD994DFAA0DA93C188A4DBA /* Name.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Name.swift; sourceTree = ""; };
+ 6E00950725DC44436C5E238C /* FakeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeAPI.swift; sourceTree = ""; };
+ 6F2985D01F8D60A4B1925C69 /* Category.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Category.swift; sourceTree = ""; };
+ 6FD42727E001E799E458C292 /* ReadOnlyFirst.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadOnlyFirst.swift; sourceTree = ""; };
+ 7986861626C2B1CB49AD7000 /* MapTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTest.swift; sourceTree = ""; };
+ 7A6070F581E611FF44AFD40A /* List.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = List.swift; sourceTree = ""; };
+ 7B1B8B838B5D9D312F2002EB /* ArrayOfArrayOfNumberOnly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayOfArrayOfNumberOnly.swift; sourceTree = ""; };
+ 7C8D5F382979854D47F18DB1 /* UserAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAPI.swift; sourceTree = ""; };
+ 82A2C3DC2235F0114C2B08E5 /* Model200Response.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model200Response.swift; sourceTree = ""; };
+ 8699F7966F748ED026A6FB4C /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; };
+ 897716962D472FE162B723CB /* APIHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIHelper.swift; sourceTree = ""; };
+ 8D22BE01748F51106DE02332 /* AnimalFarm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimalFarm.swift; sourceTree = ""; };
+ 95568E7C35F119EB4A12B498 /* Animal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Animal.swift; sourceTree = ""; };
+ 9A019F500E546A3292CE716A /* PetAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PetAPI.swift; sourceTree = ""; };
+ 9AD714C7CC59BDD18DE8DF4E /* MixedPropertiesAndAdditionalPropertiesClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixedPropertiesAndAdditionalPropertiesClass.swift; sourceTree = ""; };
+ 9DF24D2714B9C4CF14146E88 /* AnotherFakeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnotherFakeAPI.swift; sourceTree = ""; };
+ A21A69C8402A60E01116ABBD /* DogAllOf.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogAllOf.swift; sourceTree = ""; };
+ A53274D99BBDE1B79BF3521C /* StoreAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreAPI.swift; sourceTree = ""; };
+ A7B38FA00A494D13F4C382A3 /* Capitalization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Capitalization.swift; sourceTree = ""; };
+ A8E7B833748B4F0C7CDA90C6 /* ApiResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiResponse.swift; sourceTree = ""; };
+ A913A57E72D723632E9A718F /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; };
+ B2896F8BFD1AA2965C8A3015 /* Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; };
+ B42354B407EC173BEB54E042 /* FakeClassnameTags123API.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeClassnameTags123API.swift; sourceTree = ""; };
+ B65BB72353DA24536A9049BE /* ArrayOfNumberOnly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayOfNumberOnly.swift; sourceTree = ""; };
+ B8C298FC8929DCB369053F11 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; };
+ B8E0B16084741FCB82389F58 /* NumberOnly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberOnly.swift; sourceTree = ""; };
+ C15008AABC804EB6FB4CDAC6 /* OuterEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OuterEnum.swift; sourceTree = ""; };
+ C6C3E1129526A353B963EFD7 /* Dog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dog.swift; sourceTree = ""; };
+ C81447828475F76C5CF4F08A /* Return.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Return.swift; sourceTree = ""; };
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizedDictionary.swift; sourceTree = ""; };
+ E5565A447062C7B8F695F451 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; };
+ EBC76F6D4D2AA8084B7EB50E /* TypeHolderDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypeHolderDefault.swift; sourceTree = ""; };
+ ECFEB4C6C257B3BB3CEA36D1 /* Pet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pet.swift; sourceTree = ""; };
+ F1A0379CDFC55705AE76C998 /* ArrayTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayTest.swift; sourceTree = ""; };
+ F4E0AD8F60A91F72C7687560 /* OuterComposite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OuterComposite.swift; sourceTree = ""; };
+ FD60AEA646791E0EDE885DE1 /* EnumTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumTest.swift; sourceTree = ""; };
+ FD7A1702ACD8737DED6588CD /* OpenISO8601DateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenISO8601DateFormatter.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+ 4FBDCF1330A9AB9122780DB3 /* Models */ = {
+ isa = PBXGroup;
+ children = (
+ 396DEF3156BA0D12D0FC5C3C /* AdditionalPropertiesClass.swift */,
+ 95568E7C35F119EB4A12B498 /* Animal.swift */,
+ 8D22BE01748F51106DE02332 /* AnimalFarm.swift */,
+ A8E7B833748B4F0C7CDA90C6 /* ApiResponse.swift */,
+ 7B1B8B838B5D9D312F2002EB /* ArrayOfArrayOfNumberOnly.swift */,
+ B65BB72353DA24536A9049BE /* ArrayOfNumberOnly.swift */,
+ F1A0379CDFC55705AE76C998 /* ArrayTest.swift */,
+ A7B38FA00A494D13F4C382A3 /* Capitalization.swift */,
+ 212AA914B7F1793A4E32C119 /* Cat.swift */,
+ 3AD0F94F512DFBC09F9CC79A /* CatAllOf.swift */,
+ 6F2985D01F8D60A4B1925C69 /* Category.swift */,
+ 3C30827D8EAF8EA684E7BCEA /* ClassModel.swift */,
+ A913A57E72D723632E9A718F /* Client.swift */,
+ C6C3E1129526A353B963EFD7 /* Dog.swift */,
+ A21A69C8402A60E01116ABBD /* DogAllOf.swift */,
+ 10503995D9EFD031A2EFB576 /* EnumArrays.swift */,
+ 4B2C97AE6ACA1E5FB88F5BAA /* EnumClass.swift */,
+ FD60AEA646791E0EDE885DE1 /* EnumTest.swift */,
+ 3933D3B2A3AC4577094D0C23 /* File.swift */,
+ 4B3666552AA854DAF9C480A3 /* FileSchemaTestClass.swift */,
+ 3156CE41C001C80379B84BDB /* FormatTest.swift */,
+ 4C7FBC641752D2E13B150973 /* HasOnlyReadOnly.swift */,
+ 7A6070F581E611FF44AFD40A /* List.swift */,
+ 7986861626C2B1CB49AD7000 /* MapTest.swift */,
+ 9AD714C7CC59BDD18DE8DF4E /* MixedPropertiesAndAdditionalPropertiesClass.swift */,
+ 82A2C3DC2235F0114C2B08E5 /* Model200Response.swift */,
+ 5AD994DFAA0DA93C188A4DBA /* Name.swift */,
+ B8E0B16084741FCB82389F58 /* NumberOnly.swift */,
+ 27B2E9EF856E89FEAA359A3A /* Order.swift */,
+ F4E0AD8F60A91F72C7687560 /* OuterComposite.swift */,
+ C15008AABC804EB6FB4CDAC6 /* OuterEnum.swift */,
+ ECFEB4C6C257B3BB3CEA36D1 /* Pet.swift */,
+ 6FD42727E001E799E458C292 /* ReadOnlyFirst.swift */,
+ C81447828475F76C5CF4F08A /* Return.swift */,
+ 386FD590658E90509C121118 /* SpecialModelName.swift */,
+ 47B4DEBABEFE140768CFB70B /* StringBooleanMap.swift */,
+ B2896F8BFD1AA2965C8A3015 /* Tag.swift */,
+ EBC76F6D4D2AA8084B7EB50E /* TypeHolderDefault.swift */,
+ 19B65C66C97F082718DDD703 /* TypeHolderExample.swift */,
+ E5565A447062C7B8F695F451 /* User.swift */,
+ );
+ path = Models;
+ sourceTree = "";
+ };
+ 5FBA6AE5F64CD737F88B4565 = {
+ isa = PBXGroup;
+ children = (
+ 9B364C01750D7AA4F983B9E7 /* PetstoreClient */,
+ 857F0DEA1890CE66D6DAD556 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 67BF3478113E6B4DF1C4E04F /* OpenAPIs */ = {
+ isa = PBXGroup;
+ children = (
+ 897716962D472FE162B723CB /* APIHelper.swift */,
+ 37DF825B8F3BADA2B2537D17 /* APIs.swift */,
+ 02A6F6BB2152ACEE1416D44A /* CodableHelper.swift */,
+ 28A444949BBC254798C3B3DD /* Configuration.swift */,
+ B8C298FC8929DCB369053F11 /* Extensions.swift */,
+ 10A7A27EE12A4DFEA1C0EE35 /* JSONDataEncoding.swift */,
+ 35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
+ 8699F7966F748ED026A6FB4C /* Models.swift */,
+ FD7A1702ACD8737DED6588CD /* OpenISO8601DateFormatter.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
+ 11F49B24B6239C324722572C /* URLSessionImplementations.swift */,
+ F956D0CCAE23BCFD1C7BDD5D /* APIs */,
+ 4FBDCF1330A9AB9122780DB3 /* Models */,
+ );
+ path = OpenAPIs;
+ sourceTree = "";
+ };
+ 857F0DEA1890CE66D6DAD556 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 164AD6EC9C4CCF634D7C4590 /* PetstoreClient.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 9B364C01750D7AA4F983B9E7 /* PetstoreClient */ = {
+ isa = PBXGroup;
+ children = (
+ EF4C81BDD734856ED5023B77 /* Classes */,
+ );
+ path = PetstoreClient;
+ sourceTree = "";
+ };
+ EF4C81BDD734856ED5023B77 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 67BF3478113E6B4DF1C4E04F /* OpenAPIs */,
+ );
+ path = Classes;
+ sourceTree = "";
+ };
+ F956D0CCAE23BCFD1C7BDD5D /* APIs */ = {
+ isa = PBXGroup;
+ children = (
+ 9DF24D2714B9C4CF14146E88 /* AnotherFakeAPI.swift */,
+ 6E00950725DC44436C5E238C /* FakeAPI.swift */,
+ B42354B407EC173BEB54E042 /* FakeClassnameTags123API.swift */,
+ 9A019F500E546A3292CE716A /* PetAPI.swift */,
+ A53274D99BBDE1B79BF3521C /* StoreAPI.swift */,
+ 7C8D5F382979854D47F18DB1 /* UserAPI.swift */,
+ );
+ path = APIs;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ C1282C2230015E0D204BEAED /* PetstoreClient */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B46EDEB1A7F0D78FE6394544 /* Build configuration list for PBXNativeTarget "PetstoreClient" */;
+ buildPhases = (
+ E539708354CE60FE486F81ED /* Sources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = PetstoreClient;
+ productName = PetstoreClient;
+ productReference = 164AD6EC9C4CCF634D7C4590 /* PetstoreClient.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ E7D276EE2369D8C455513C2E /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1020;
+ };
+ buildConfigurationList = ECAB17FF35111B5E14DAAC08 /* Build configuration list for PBXProject "PetstoreClient" */;
+ compatibilityVersion = "Xcode 10.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ Base,
+ en,
+ );
+ mainGroup = 5FBA6AE5F64CD737F88B4565;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ C1282C2230015E0D204BEAED /* PetstoreClient */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ E539708354CE60FE486F81ED /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1E6C7C7F271A802DF8099330 /* APIHelper.swift in Sources */,
+ 40E3027D2E38D8329C6AB01F /* APIs.swift in Sources */,
+ 248F2F0F29E8FDAE9CAD64C5 /* AdditionalPropertiesClass.swift in Sources */,
+ 2B441CDFFFDDB343C04F5375 /* Animal.swift in Sources */,
+ 45B3B29D7A62049F824751F8 /* AnimalFarm.swift in Sources */,
+ CA9B9B19882EA044EAD0B359 /* AnotherFakeAPI.swift in Sources */,
+ 0299339D13C3571C4C57368A /* ApiResponse.swift in Sources */,
+ 4B4BE77747413A9188CDABD2 /* ArrayOfArrayOfNumberOnly.swift in Sources */,
+ 3691B017D3AA18404A563C67 /* ArrayOfNumberOnly.swift in Sources */,
+ A85E190556818FFA79896E92 /* ArrayTest.swift in Sources */,
+ BB1F3C6D50B8F0A8CC4F1749 /* Capitalization.swift in Sources */,
+ D95A5F83AAA7D5C95A29AB83 /* Cat.swift in Sources */,
+ 4A344DF7ECE721B4BBEDCB4A /* CatAllOf.swift in Sources */,
+ E8A58C6414E88AF3EAE45B69 /* Category.swift in Sources */,
+ 7441BBA84C31E06400338F89 /* ClassModel.swift in Sources */,
+ AD594BFB99E31A5E07579237 /* Client.swift in Sources */,
+ 6FBD978F4D1ED92E7071FFBB /* CodableHelper.swift in Sources */,
+ 72547ECFB451A509409311EE /* Configuration.swift in Sources */,
+ 0C1E4C682F2D0AF7D9E431EE /* Dog.swift in Sources */,
+ 72CE544C52BB33778D1B89B8 /* DogAllOf.swift in Sources */,
+ 61322FC4325F1A4FF24ACA48 /* EnumArrays.swift in Sources */,
+ ACF3037926301D4D6E848745 /* EnumClass.swift in Sources */,
+ 9DA1C6F8B4D6C8595F28C098 /* EnumTest.swift in Sources */,
+ 269E3103C458C78EA5726EE2 /* Extensions.swift in Sources */,
+ DDBD4C0FBA3CD6A4DA3DF376 /* FakeAPI.swift in Sources */,
+ 34C26979F4678B5B579D26E8 /* FakeClassnameTags123API.swift in Sources */,
+ 97F7B85BF07A325EEBF92C93 /* File.swift in Sources */,
+ DDF1D589267D56D9BED3C6E5 /* FileSchemaTestClass.swift in Sources */,
+ 6B638A04B34C82B2091D6EDD /* FormatTest.swift in Sources */,
+ 86DE714469BE8BA28AFF710F /* HasOnlyReadOnly.swift in Sources */,
+ 9D22720B1B12BE43D3B45ADE /* JSONDataEncoding.swift in Sources */,
+ 7588B7E2960253174ADCCF16 /* JSONEncodingHelper.swift in Sources */,
+ 9CA19AA4483F6EB50270A81E /* List.swift in Sources */,
+ 081C0B80A989B1AAF2665121 /* MapTest.swift in Sources */,
+ B301DB1B80F37C757550AA17 /* MixedPropertiesAndAdditionalPropertiesClass.swift in Sources */,
+ 9CF06ACDA32CB0C3E74E435C /* Model200Response.swift in Sources */,
+ D3BAB7C7A607392CA838C580 /* Models.swift in Sources */,
+ 37DEADD6CD0496690725B8A7 /* Name.swift in Sources */,
+ 555DEA47352B42E49082922B /* NumberOnly.swift in Sources */,
+ B637B9432565A6A8E7C73E7F /* OpenISO8601DateFormatter.swift in Sources */,
+ 0E6932F1C55BA6880693C478 /* Order.swift in Sources */,
+ 922BDADAB291907A7FD14314 /* OuterComposite.swift in Sources */,
+ 41A491E9B577C510F927D126 /* OuterEnum.swift in Sources */,
+ 2C29D5B60E00DDA3878F1BDE /* Pet.swift in Sources */,
+ A6E5A5629495DB0ED672B06F /* PetAPI.swift in Sources */,
+ 914F4D1FCB17773C067C4E68 /* ReadOnlyFirst.swift in Sources */,
+ A6E50CC6845FE58D8C236253 /* Return.swift in Sources */,
+ 294CDFA409BC369C0FDC5FB3 /* SpecialModelName.swift in Sources */,
+ CB68ABDBAADAF6B8D7B93A5D /* StoreAPI.swift in Sources */,
+ EDFC6C5121A43997014049CB /* StringBooleanMap.swift in Sources */,
+ AD3A3107C12F2634CD22163B /* SynchronizedDictionary.swift in Sources */,
+ B3E35FE2773D4A8BA15CFA88 /* Tag.swift in Sources */,
+ 5695497F5DBF6C08842755A3 /* TypeHolderDefault.swift in Sources */,
+ FECA2E8C9D0BDFEC459E8996 /* TypeHolderExample.swift in Sources */,
+ A3E16915AA7FD644C4FE162E /* URLSessionImplementations.swift in Sources */,
+ 31DFF71D8CCCA0D2D2F8AC90 /* User.swift in Sources */,
+ 64C48E3658CF53EBE8AF82F9 /* UserAPI.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 3B2C02AFB91CB5C82766ED5C /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ APPLICATION_EXTENSION_API_ONLY = YES;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ A9EB0A02B94C427CBACFEC7C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "DEBUG=1",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ DD3EEB93949E9EBA4437E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ APPLICATION_EXTENSION_API_ONLY = YES;
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ F81D4E5FECD46E9AA6DD2C29 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_VERSION = 5.0;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ B46EDEB1A7F0D78FE6394544 /* Build configuration list for PBXNativeTarget "PetstoreClient" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DD3EEB93949E9EBA4437E9CD /* Debug */,
+ 3B2C02AFB91CB5C82766ED5C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = "";
+ };
+ ECAB17FF35111B5E14DAAC08 /* Build configuration list for PBXProject "PetstoreClient" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A9EB0A02B94C427CBACFEC7C /* Debug */,
+ F81D4E5FECD46E9AA6DD2C29 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E7D276EE2369D8C455513C2E /* Project object */;
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000000..919434a6254
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme
new file mode 100644
index 00000000000..26d510552bb
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.xcodeproj/xcshareddata/xcschemes/PetstoreClient.xcscheme
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIHelper.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIHelper.swift
new file mode 100644
index 00000000000..20007009680
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIHelper.swift
@@ -0,0 +1,70 @@
+// APIHelper.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct APIHelper {
+ public static func rejectNil(_ source: [String: Any?]) -> [String: Any]? {
+ let destination = source.reduce(into: [String: Any]()) { (result, item) in
+ if let value = item.value {
+ result[item.key] = value
+ }
+ }
+
+ if destination.isEmpty {
+ return nil
+ }
+ return destination
+ }
+
+ public static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] {
+ return source.reduce(into: [String: String]()) { (result, item) in
+ if let collection = item.value as? [Any?] {
+ result[item.key] = collection.filter({ $0 != nil }).map { "\($0!)" }.joined(separator: ",")
+ } else if let value: Any = item.value {
+ result[item.key] = "\(value)"
+ }
+ }
+ }
+
+ public static func convertBoolToString(_ source: [String: Any]?) -> [String: Any]? {
+ guard let source = source else {
+ return nil
+ }
+
+ return source.reduce(into: [String: Any](), { (result, item) in
+ switch item.value {
+ case let x as Bool:
+ result[item.key] = x.description
+ default:
+ result[item.key] = item.value
+ }
+ })
+ }
+
+ public static func mapValueToPathItem(_ source: Any) -> Any {
+ if let collection = source as? [Any?] {
+ return collection.filter({ $0 != nil }).map({"\($0!)"}).joined(separator: ",")
+ }
+ return source
+ }
+
+ public static func mapValuesToQueryItems(_ source: [String: Any?]) -> [URLQueryItem]? {
+ let destination = source.filter({ $0.value != nil}).reduce(into: [URLQueryItem]()) { (result, item) in
+ if let collection = item.value as? [Any?] {
+ let value = collection.filter({ $0 != nil }).map({"\($0!)"}).joined(separator: ",")
+ result.append(URLQueryItem(name: item.key, value: value))
+ } else if let value = item.value {
+ result.append(URLQueryItem(name: item.key, value: "\(value)"))
+ }
+ }
+
+ if destination.isEmpty {
+ return nil
+ }
+ return destination
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift
new file mode 100644
index 00000000000..a5c2d605dff
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift
@@ -0,0 +1,64 @@
+// APIs.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class PetstoreClientAPI {
+ public static var basePath = "http://petstore.swagger.io:80/v2"
+ public static var credential: URLCredential?
+ public static var customHeaders: [String: String] = [:]
+ public static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory()
+ public static var apiResponseQueue: DispatchQueue = .main
+}
+
+open class RequestBuilder {
+ var credential: URLCredential?
+ var headers: [String: String]
+ public let parameters: [String: Any]?
+ public let isBody: Bool
+ public let method: String
+ public let URLString: String
+
+ /// Optional block to obtain a reference to the request's progress instance when available.
+ /// With the URLSession http client the request's progress only works on iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0.
+ /// If you need to get the request's progress in older OS versions, please use Alamofire http client.
+ public var onProgressReady: ((Progress) -> Void)?
+
+ required public init(method: String, URLString: String, parameters: [String: Any]?, isBody: Bool, headers: [String: String] = [:]) {
+ self.method = method
+ self.URLString = URLString
+ self.parameters = parameters
+ self.isBody = isBody
+ self.headers = headers
+
+ addHeaders(PetstoreClientAPI.customHeaders)
+ }
+
+ open func addHeaders(_ aHeaders: [String: String]) {
+ for (header, value) in aHeaders {
+ headers[header] = value
+ }
+ }
+
+ open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { }
+
+ public func addHeader(name: String, value: String) -> Self {
+ if !value.isEmpty {
+ headers[name] = value
+ }
+ return self
+ }
+
+ open func addCredential() -> Self {
+ self.credential = PetstoreClientAPI.credential
+ return self
+ }
+}
+
+public protocol RequestBuilderFactory {
+ func getNonDecodableBuilder() -> RequestBuilder.Type
+ func getBuilder() -> RequestBuilder.Type
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift
new file mode 100644
index 00000000000..5bbf323f820
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift
@@ -0,0 +1,48 @@
+//
+// AnotherFakeAPI.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class AnotherFakeAPI {
+ /**
+ To test special tags
+
+ - parameter body: (body) client model
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) {
+ call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ To test special tags
+ - PATCH /another-fake/dummy
+ - To test special tags and operation ID starting with number
+ - parameter body: (body) client model
+ - returns: RequestBuilder
+ */
+ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder {
+ let path = "/another-fake/dummy"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
new file mode 100644
index 00000000000..134d6aea416
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
@@ -0,0 +1,619 @@
+//
+// FakeAPI.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class FakeAPI {
+ /**
+
+ - parameter body: (body) Input boolean as post body (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) {
+ fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - POST /fake/outer/boolean
+ - Test serialization of outer boolean types
+ - parameter body: (body) Input boolean as post body (optional)
+ - returns: RequestBuilder
+ */
+ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder {
+ let path = "/fake/outer/boolean"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+
+ - parameter body: (body) Input composite as post body (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) {
+ fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - POST /fake/outer/composite
+ - Test serialization of object with outer number type
+ - parameter body: (body) Input composite as post body (optional)
+ - returns: RequestBuilder
+ */
+ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder {
+ let path = "/fake/outer/composite"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+
+ - parameter body: (body) Input number as post body (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) {
+ fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - POST /fake/outer/number
+ - Test serialization of outer number types
+ - parameter body: (body) Input number as post body (optional)
+ - returns: RequestBuilder
+ */
+ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder {
+ let path = "/fake/outer/number"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+
+ - parameter body: (body) Input string as post body (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) {
+ fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - POST /fake/outer/string
+ - Test serialization of outer string types
+ - parameter body: (body) Input string as post body (optional)
+ - returns: RequestBuilder
+ */
+ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder {
+ let path = "/fake/outer/string"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+
+ - parameter body: (body)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - PUT /fake/body-with-file-schema
+ - For this test, the body for this request much reference a schema named `File`.
+ - parameter body: (body)
+ - returns: RequestBuilder
+ */
+ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder {
+ let path = "/fake/body-with-file-schema"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+
+ - parameter query: (query)
+ - parameter body: (body)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ - PUT /fake/body-with-query-params
+ - parameter query: (query)
+ - parameter body: (body)
+ - returns: RequestBuilder
+ */
+ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder {
+ let path = "/fake/body-with-query-params"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "query": query.encodeToJSON()
+ ])
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ To test \"client\" model
+
+ - parameter body: (body) client model
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) {
+ testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ To test \"client\" model
+ - PATCH /fake
+ - To test \"client\" model
+ - parameter body: (body) client model
+ - returns: RequestBuilder
+ */
+ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder {
+ let path = "/fake"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+
+ - parameter number: (form) None
+ - parameter double: (form) None
+ - parameter patternWithoutDelimiter: (form) None
+ - parameter byte: (form) None
+ - parameter integer: (form) None (optional)
+ - parameter int32: (form) None (optional)
+ - parameter int64: (form) None (optional)
+ - parameter float: (form) None (optional)
+ - parameter string: (form) None (optional)
+ - parameter binary: (form) None (optional)
+ - parameter date: (form) None (optional)
+ - parameter dateTime: (form) None (optional)
+ - parameter password: (form) None (optional)
+ - parameter callback: (form) None (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+ - POST /fake
+ - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+ - BASIC:
+ - type: http
+ - name: http_basic_test
+ - parameter number: (form) None
+ - parameter double: (form) None
+ - parameter patternWithoutDelimiter: (form) None
+ - parameter byte: (form) None
+ - parameter integer: (form) None (optional)
+ - parameter int32: (form) None (optional)
+ - parameter int64: (form) None (optional)
+ - parameter float: (form) None (optional)
+ - parameter string: (form) None (optional)
+ - parameter binary: (form) None (optional)
+ - parameter date: (form) None (optional)
+ - parameter dateTime: (form) None (optional)
+ - parameter password: (form) None (optional)
+ - parameter callback: (form) None (optional)
+ - returns: RequestBuilder
+ */
+ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder {
+ let path = "/fake"
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "integer": integer?.encodeToJSON(),
+ "int32": int32?.encodeToJSON(),
+ "int64": int64?.encodeToJSON(),
+ "number": number.encodeToJSON(),
+ "float": float?.encodeToJSON(),
+ "double": double.encodeToJSON(),
+ "string": string?.encodeToJSON(),
+ "pattern_without_delimiter": patternWithoutDelimiter.encodeToJSON(),
+ "byte": byte.encodeToJSON(),
+ "binary": binary?.encodeToJSON(),
+ "date": date?.encodeToJSON(),
+ "dateTime": dateTime?.encodeToJSON(),
+ "password": password?.encodeToJSON(),
+ "callback": callback?.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ * enum for parameter enumHeaderStringArray
+ */
+ public enum EnumHeaderStringArray_testEnumParameters: String, CaseIterable {
+ case greaterThan = ">"
+ case dollar = "$"
+ }
+
+ /**
+ * enum for parameter enumHeaderString
+ */
+ public enum EnumHeaderString_testEnumParameters: String, CaseIterable {
+ case abc = "_abc"
+ case efg = "-efg"
+ case xyz = "(xyz)"
+ }
+
+ /**
+ * enum for parameter enumQueryStringArray
+ */
+ public enum EnumQueryStringArray_testEnumParameters: String, CaseIterable {
+ case greaterThan = ">"
+ case dollar = "$"
+ }
+
+ /**
+ * enum for parameter enumQueryString
+ */
+ public enum EnumQueryString_testEnumParameters: String, CaseIterable {
+ case abc = "_abc"
+ case efg = "-efg"
+ case xyz = "(xyz)"
+ }
+
+ /**
+ * enum for parameter enumQueryInteger
+ */
+ public enum EnumQueryInteger_testEnumParameters: Int, CaseIterable {
+ case _1 = 1
+ case number2 = -2
+ }
+
+ /**
+ * enum for parameter enumQueryDouble
+ */
+ public enum EnumQueryDouble_testEnumParameters: Double, CaseIterable {
+ case _11 = 1.1
+ case number12 = -1.2
+ }
+
+ /**
+ * enum for parameter enumFormStringArray
+ */
+ public enum EnumFormStringArray_testEnumParameters: String, CaseIterable {
+ case greaterThan = ">"
+ case dollar = "$"
+ }
+
+ /**
+ * enum for parameter enumFormString
+ */
+ public enum EnumFormString_testEnumParameters: String, CaseIterable {
+ case abc = "_abc"
+ case efg = "-efg"
+ case xyz = "(xyz)"
+ }
+
+ /**
+ To test enum parameters
+
+ - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
+ - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
+ - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
+ - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
+ - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
+ - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
+ - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
+ - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ To test enum parameters
+ - GET /fake
+ - To test enum parameters
+ - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional)
+ - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg)
+ - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional)
+ - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg)
+ - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional)
+ - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional)
+ - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar)
+ - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg)
+ - returns: RequestBuilder
+ */
+ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder {
+ let path = "/fake"
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "enum_form_string_array": enumFormStringArray?.encodeToJSON(),
+ "enum_form_string": enumFormString?.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(),
+ "enum_query_string": enumQueryString?.encodeToJSON(),
+ "enum_query_integer": enumQueryInteger?.encodeToJSON(),
+ "enum_query_double": enumQueryDouble?.encodeToJSON()
+ ])
+ let nillableHeaders: [String: Any?] = [
+ "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(),
+ "enum_header_string": enumHeaderString?.encodeToJSON()
+ ]
+ let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false, headers: headerParameters)
+ }
+
+ /**
+ Fake endpoint to test group parameters (optional)
+
+ - parameter requiredStringGroup: (query) Required String in group parameters
+ - parameter requiredBooleanGroup: (header) Required Boolean in group parameters
+ - parameter requiredInt64Group: (query) Required Integer in group parameters
+ - parameter stringGroup: (query) String in group parameters (optional)
+ - parameter booleanGroup: (header) Boolean in group parameters (optional)
+ - parameter int64Group: (query) Integer in group parameters (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Fake endpoint to test group parameters (optional)
+ - DELETE /fake
+ - Fake endpoint to test group parameters (optional)
+ - parameter requiredStringGroup: (query) Required String in group parameters
+ - parameter requiredBooleanGroup: (header) Required Boolean in group parameters
+ - parameter requiredInt64Group: (query) Required Integer in group parameters
+ - parameter stringGroup: (query) String in group parameters (optional)
+ - parameter booleanGroup: (header) Boolean in group parameters (optional)
+ - parameter int64Group: (query) Integer in group parameters (optional)
+ - returns: RequestBuilder
+ */
+ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder {
+ let path = "/fake"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "required_string_group": requiredStringGroup.encodeToJSON(),
+ "required_int64_group": requiredInt64Group.encodeToJSON(),
+ "string_group": stringGroup?.encodeToJSON(),
+ "int64_group": int64Group?.encodeToJSON()
+ ])
+ let nillableHeaders: [String: Any?] = [
+ "required_boolean_group": requiredBooleanGroup.encodeToJSON(),
+ "boolean_group": booleanGroup?.encodeToJSON()
+ ]
+ let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false, headers: headerParameters)
+ }
+
+ /**
+ test inline additionalProperties
+
+ - parameter param: (body) request body
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ test inline additionalProperties
+ - POST /fake/inline-additionalProperties
+ - parameter param: (body) request body
+ - returns: RequestBuilder
+ */
+ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder {
+ let path = "/fake/inline-additionalProperties"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ test json serialization of form data
+
+ - parameter param: (form) field1
+ - parameter param2: (form) field2
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ test json serialization of form data
+ - GET /fake/jsonFormData
+ - parameter param: (form) field1
+ - parameter param2: (form) field2
+ - returns: RequestBuilder
+ */
+ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder {
+ let path = "/fake/jsonFormData"
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "param": param.encodeToJSON(),
+ "param2": param2.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift
new file mode 100644
index 00000000000..48cfe7187b9
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift
@@ -0,0 +1,51 @@
+//
+// FakeClassnameTags123API.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class FakeClassnameTags123API {
+ /**
+ To test class name in snake case
+
+ - parameter body: (body) client model
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) {
+ testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ To test class name in snake case
+ - PATCH /fake_classname_test
+ - To test class name in snake case
+ - API Key:
+ - type: apiKey api_key_query (QUERY)
+ - name: api_key_query
+ - parameter body: (body) client model
+ - returns: RequestBuilder
+ */
+ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder {
+ let path = "/fake_classname_test"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
new file mode 100644
index 00000000000..0552d4a6c16
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
@@ -0,0 +1,431 @@
+//
+// PetAPI.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class PetAPI {
+ /**
+ Add a new pet to the store
+
+ - parameter body: (body) Pet object that needs to be added to the store
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Add a new pet to the store
+ - POST /pet
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter body: (body) Pet object that needs to be added to the store
+ - returns: RequestBuilder
+ */
+ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder {
+ let path = "/pet"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Deletes a pet
+
+ - parameter petId: (path) Pet id to delete
+ - parameter apiKey: (header) (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Deletes a pet
+ - DELETE /pet/{petId}
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter petId: (path) Pet id to delete
+ - parameter apiKey: (header) (optional)
+ - returns: RequestBuilder
+ */
+ open class func deletePetWithRequestBuilder(petId: Int64, apiKey: String? = nil) -> RequestBuilder {
+ var path = "/pet/{petId}"
+ let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))"
+ let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+ let nillableHeaders: [String: Any?] = [
+ "api_key": apiKey?.encodeToJSON()
+ ]
+ let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false, headers: headerParameters)
+ }
+
+ /**
+ * enum for parameter status
+ */
+ public enum Status_findPetsByStatus: String, CaseIterable {
+ case available = "available"
+ case pending = "pending"
+ case sold = "sold"
+ }
+
+ /**
+ Finds Pets by status
+
+ - parameter status: (query) Status values that need to be considered for filter
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) {
+ findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Finds Pets by status
+ - GET /pet/findByStatus
+ - Multiple status values can be provided with comma separated strings
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter status: (query) Status values that need to be considered for filter
+ - returns: RequestBuilder<[Pet]>
+ */
+ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> {
+ let path = "/pet/findByStatus"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "status": status.encodeToJSON()
+ ])
+
+ let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Finds Pets by tags
+
+ - parameter tags: (query) Tags to filter by
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) {
+ findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Finds Pets by tags
+ - GET /pet/findByTags
+ - Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter tags: (query) Tags to filter by
+ - returns: RequestBuilder<[Pet]>
+ */
+ open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> {
+ let path = "/pet/findByTags"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "tags": tags.encodeToJSON()
+ ])
+
+ let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Find pet by ID
+
+ - parameter petId: (path) ID of pet to return
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) {
+ getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Find pet by ID
+ - GET /pet/{petId}
+ - Returns a single pet
+ - API Key:
+ - type: apiKey api_key
+ - name: api_key
+ - parameter petId: (path) ID of pet to return
+ - returns: RequestBuilder
+ */
+ open class func getPetByIdWithRequestBuilder(petId: Int64) -> RequestBuilder {
+ var path = "/pet/{petId}"
+ let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))"
+ let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Update an existing pet
+
+ - parameter body: (body) Pet object that needs to be added to the store
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Update an existing pet
+ - PUT /pet
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter body: (body) Pet object that needs to be added to the store
+ - returns: RequestBuilder
+ */
+ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder {
+ let path = "/pet"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Updates a pet in the store with form data
+
+ - parameter petId: (path) ID of pet that needs to be updated
+ - parameter name: (form) Updated name of the pet (optional)
+ - parameter status: (form) Updated status of the pet (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Updates a pet in the store with form data
+ - POST /pet/{petId}
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter petId: (path) ID of pet that needs to be updated
+ - parameter name: (form) Updated name of the pet (optional)
+ - parameter status: (form) Updated status of the pet (optional)
+ - returns: RequestBuilder
+ */
+ open class func updatePetWithFormWithRequestBuilder(petId: Int64, name: String? = nil, status: String? = nil) -> RequestBuilder {
+ var path = "/pet/{petId}"
+ let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))"
+ let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "name": name?.encodeToJSON(),
+ "status": status?.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ uploads an image
+
+ - parameter petId: (path) ID of pet to update
+ - parameter additionalMetadata: (form) Additional data to pass to server (optional)
+ - parameter file: (form) file to upload (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) {
+ uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ uploads an image
+ - POST /pet/{petId}/uploadImage
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter petId: (path) ID of pet to update
+ - parameter additionalMetadata: (form) Additional data to pass to server (optional)
+ - parameter file: (form) file to upload (optional)
+ - returns: RequestBuilder
+ */
+ open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder {
+ var path = "/pet/{petId}/uploadImage"
+ let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))"
+ let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "file": file?.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ uploads an image (required)
+
+ - parameter petId: (path) ID of pet to update
+ - parameter requiredFile: (form) file to upload
+ - parameter additionalMetadata: (form) Additional data to pass to server (optional)
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) {
+ uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ uploads an image (required)
+ - POST /fake/{petId}/uploadImageWithRequiredFile
+ - OAuth:
+ - type: oauth2
+ - name: petstore_auth
+ - parameter petId: (path) ID of pet to update
+ - parameter requiredFile: (form) file to upload
+ - parameter additionalMetadata: (form) Additional data to pass to server (optional)
+ - returns: RequestBuilder
+ */
+ open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder {
+ var path = "/fake/{petId}/uploadImageWithRequiredFile"
+ let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))"
+ let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let formParams: [String: Any?] = [
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "requiredFile": requiredFile.encodeToJSON()
+ ]
+
+ let nonNullParameters = APIHelper.rejectNil(formParams)
+ let parameters = APIHelper.convertBoolToString(nonNullParameters)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift
new file mode 100644
index 00000000000..a8a83eda39a
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift
@@ -0,0 +1,165 @@
+//
+// StoreAPI.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class StoreAPI {
+ /**
+ Delete purchase order by ID
+
+ - parameter orderId: (path) ID of the order that needs to be deleted
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Delete purchase order by ID
+ - DELETE /store/order/{order_id}
+ - For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
+ - parameter orderId: (path) ID of the order that needs to be deleted
+ - returns: RequestBuilder
+ */
+ open class func deleteOrderWithRequestBuilder(orderId: String) -> RequestBuilder {
+ var path = "/store/order/{order_id}"
+ let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))"
+ let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Returns pet inventories by status
+
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) {
+ getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Returns pet inventories by status
+ - GET /store/inventory
+ - Returns a map of status codes to quantities
+ - API Key:
+ - type: apiKey api_key
+ - name: api_key
+ - returns: RequestBuilder<[String:Int]>
+ */
+ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> {
+ let path = "/store/inventory"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Find purchase order by ID
+
+ - parameter orderId: (path) ID of pet that needs to be fetched
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) {
+ getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Find purchase order by ID
+ - GET /store/order/{order_id}
+ - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
+ - parameter orderId: (path) ID of pet that needs to be fetched
+ - returns: RequestBuilder
+ */
+ open class func getOrderByIdWithRequestBuilder(orderId: Int64) -> RequestBuilder {
+ var path = "/store/order/{order_id}"
+ let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))"
+ let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Place an order for a pet
+
+ - parameter body: (body) order placed for purchasing the pet
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) {
+ placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Place an order for a pet
+ - POST /store/order
+ - parameter body: (body) order placed for purchasing the pet
+ - returns: RequestBuilder
+ */
+ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder {
+ let path = "/store/order"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
new file mode 100644
index 00000000000..505ed1b0c5c
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
@@ -0,0 +1,318 @@
+//
+// UserAPI.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class UserAPI {
+ /**
+ Create user
+
+ - parameter body: (body) Created user object
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Create user
+ - POST /user
+ - This can only be done by the logged in user.
+ - parameter body: (body) Created user object
+ - returns: RequestBuilder
+ */
+ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder {
+ let path = "/user"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Creates list of users with given input array
+
+ - parameter body: (body) List of user object
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Creates list of users with given input array
+ - POST /user/createWithArray
+ - parameter body: (body) List of user object
+ - returns: RequestBuilder
+ */
+ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder {
+ let path = "/user/createWithArray"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Creates list of users with given input array
+
+ - parameter body: (body) List of user object
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Creates list of users with given input array
+ - POST /user/createWithList
+ - parameter body: (body) List of user object
+ - returns: RequestBuilder
+ */
+ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder {
+ let path = "/user/createWithList"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+ /**
+ Delete user
+
+ - parameter username: (path) The name that needs to be deleted
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Delete user
+ - DELETE /user/{username}
+ - This can only be done by the logged in user.
+ - parameter username: (path) The name that needs to be deleted
+ - returns: RequestBuilder
+ */
+ open class func deleteUserWithRequestBuilder(username: String) -> RequestBuilder {
+ var path = "/user/{username}"
+ let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))"
+ let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Get user by user name
+
+ - parameter username: (path) The name that needs to be fetched. Use user1 for testing.
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) {
+ getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Get user by user name
+ - GET /user/{username}
+ - parameter username: (path) The name that needs to be fetched. Use user1 for testing.
+ - returns: RequestBuilder
+ */
+ open class func getUserByNameWithRequestBuilder(username: String) -> RequestBuilder {
+ var path = "/user/{username}"
+ let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))"
+ let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Logs user into the system
+
+ - parameter username: (query) The user name for login
+ - parameter password: (query) The password for login in clear text
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) {
+ loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case let .success(response):
+ completion(response.body, nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Logs user into the system
+ - GET /user/login
+ - responseHeaders: [X-Rate-Limit(Int), X-Expires-After(Date)]
+ - parameter username: (query) The user name for login
+ - parameter password: (query) The password for login in clear text
+ - returns: RequestBuilder
+ */
+ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder {
+ let path = "/user/login"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ var url = URLComponents(string: URLString)
+ url?.queryItems = APIHelper.mapValuesToQueryItems([
+ "username": username.encodeToJSON(),
+ "password": password.encodeToJSON()
+ ])
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Logs out current logged in user session
+
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Logs out current logged in user session
+ - GET /user/logout
+ - returns: RequestBuilder
+ */
+ open class func logoutUserWithRequestBuilder() -> RequestBuilder {
+ let path = "/user/logout"
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters: [String: Any]? = nil
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, isBody: false)
+ }
+
+ /**
+ Updated user
+
+ - parameter username: (path) name that need to be deleted
+ - parameter body: (body) Updated user object
+ - parameter apiResponseQueue: The queue on which api response is dispatched.
+ - parameter completion: completion handler to receive the data and the error objects
+ */
+ open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) {
+ updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in
+ switch result {
+ case .success:
+ completion((), nil)
+ case let .failure(error):
+ completion(nil, error)
+ }
+ }
+ }
+
+ /**
+ Updated user
+ - PUT /user/{username}
+ - This can only be done by the logged in user.
+ - parameter username: (path) name that need to be deleted
+ - parameter body: (body) Updated user object
+ - returns: RequestBuilder
+ */
+ open class func updateUserWithRequestBuilder(username: String, body: User) -> RequestBuilder {
+ var path = "/user/{username}"
+ let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))"
+ let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
+ path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil)
+ let URLString = PetstoreClientAPI.basePath + path
+ let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body)
+
+ let url = URLComponents(string: URLString)
+
+ let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
+
+ return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, isBody: true)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift
new file mode 100644
index 00000000000..ef971ebadc6
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift
@@ -0,0 +1,48 @@
+//
+// CodableHelper.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class CodableHelper {
+
+ private static var customDateFormatter: DateFormatter?
+ private static var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
+ private static var customJSONDecoder: JSONDecoder?
+ private static var defaultJSONDecoder: JSONDecoder = {
+ let decoder = JSONDecoder()
+ decoder.dateDecodingStrategy = .formatted(CodableHelper.dateFormatter)
+ return decoder
+ }()
+ private static var customJSONEncoder: JSONEncoder?
+ private static var defaultJSONEncoder: JSONEncoder = {
+ let encoder = JSONEncoder()
+ encoder.dateEncodingStrategy = .formatted(CodableHelper.dateFormatter)
+ encoder.outputFormatting = .prettyPrinted
+ return encoder
+ }()
+
+ public static var dateFormatter: DateFormatter {
+ get { return self.customDateFormatter ?? self.defaultDateFormatter }
+ set { self.customDateFormatter = newValue }
+ }
+ public static var jsonDecoder: JSONDecoder {
+ get { return self.customJSONDecoder ?? self.defaultJSONDecoder }
+ set { self.customJSONDecoder = newValue }
+ }
+ public static var jsonEncoder: JSONEncoder {
+ get { return self.customJSONEncoder ?? self.defaultJSONEncoder }
+ set { self.customJSONEncoder = newValue }
+ }
+
+ open class func decode(_ type: T.Type, from data: Data) -> Swift.Result where T: Decodable {
+ return Swift.Result { try self.jsonDecoder.decode(type, from: data) }
+ }
+
+ open class func encode(_ value: T) -> Swift.Result where T: Encodable {
+ return Swift.Result { try self.jsonEncoder.encode(value) }
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Configuration.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Configuration.swift
new file mode 100644
index 00000000000..627d9adb757
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Configuration.swift
@@ -0,0 +1,16 @@
+// Configuration.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class Configuration {
+
+ // This value is used to configure the date formatter that is used to serialize dates into JSON format.
+ // You must set it prior to encoding any dates, and it will only be read once.
+ @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.")
+ public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift
new file mode 100644
index 00000000000..93ed6b90b37
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift
@@ -0,0 +1,179 @@
+// Extensions.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+extension Bool: JSONEncodable {
+ func encodeToJSON() -> Any { return self as Any }
+}
+
+extension Float: JSONEncodable {
+ func encodeToJSON() -> Any { return self as Any }
+}
+
+extension Int: JSONEncodable {
+ func encodeToJSON() -> Any { return self as Any }
+}
+
+extension Int32: JSONEncodable {
+ func encodeToJSON() -> Any { return NSNumber(value: self as Int32) }
+}
+
+extension Int64: JSONEncodable {
+ func encodeToJSON() -> Any { return NSNumber(value: self as Int64) }
+}
+
+extension Double: JSONEncodable {
+ func encodeToJSON() -> Any { return self as Any }
+}
+
+extension String: JSONEncodable {
+ func encodeToJSON() -> Any { return self as Any }
+}
+
+extension RawRepresentable where RawValue: JSONEncodable {
+ func encodeToJSON() -> Any { return self.rawValue as Any }
+}
+
+private func encodeIfPossible(_ object: T) -> Any {
+ if let encodableObject = object as? JSONEncodable {
+ return encodableObject.encodeToJSON()
+ } else {
+ return object as Any
+ }
+}
+
+extension Array: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self.map(encodeIfPossible)
+ }
+}
+
+extension Dictionary: JSONEncodable {
+ func encodeToJSON() -> Any {
+ var dictionary = [AnyHashable: Any]()
+ for (key, value) in self {
+ dictionary[key] = encodeIfPossible(value)
+ }
+ return dictionary as Any
+ }
+}
+
+extension Data: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self.base64EncodedString(options: Data.Base64EncodingOptions())
+ }
+}
+
+extension Date: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return CodableHelper.dateFormatter.string(from: self) as Any
+ }
+}
+
+extension URL: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self
+ }
+}
+
+extension UUID: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self.uuidString
+ }
+}
+
+extension String: CodingKey {
+
+ public var stringValue: String {
+ return self
+ }
+
+ public init?(stringValue: String) {
+ self.init(stringLiteral: stringValue)
+ }
+
+ public var intValue: Int? {
+ return nil
+ }
+
+ public init?(intValue: Int) {
+ return nil
+ }
+
+}
+
+extension KeyedEncodingContainerProtocol {
+
+ public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable {
+ var arrayContainer = nestedUnkeyedContainer(forKey: key)
+ try arrayContainer.encode(contentsOf: values)
+ }
+
+ public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable {
+ if let values = values {
+ try encodeArray(values, forKey: key)
+ }
+ }
+
+ public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable {
+ for (key, value) in pairs {
+ try encode(value, forKey: key)
+ }
+ }
+
+ public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable {
+ if let pairs = pairs {
+ try encodeMap(pairs)
+ }
+ }
+
+}
+
+extension KeyedDecodingContainerProtocol {
+
+ public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable {
+ var tmpArray = [T]()
+
+ var nestedContainer = try nestedUnkeyedContainer(forKey: key)
+ while !nestedContainer.isAtEnd {
+ let arrayValue = try nestedContainer.decode(T.self)
+ tmpArray.append(arrayValue)
+ }
+
+ return tmpArray
+ }
+
+ public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable {
+ var tmpArray: [T]?
+
+ if contains(key) {
+ tmpArray = try decodeArray(T.self, forKey: key)
+ }
+
+ return tmpArray
+ }
+
+ public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable {
+ var map: [Self.Key: T] = [:]
+
+ for key in allKeys {
+ if !excludedKeys.contains(key) {
+ let value = try decode(T.self, forKey: key)
+ map[key] = value
+ }
+ }
+
+ return map
+ }
+
+}
+
+extension HTTPURLResponse {
+ var isStatusCodeSuccessful: Bool {
+ return Array(200 ..< 300).contains(statusCode)
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift
new file mode 100644
index 00000000000..b79e9f5e64d
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift
@@ -0,0 +1,53 @@
+//
+// JSONDataEncoding.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct JSONDataEncoding {
+
+ // MARK: Properties
+
+ private static let jsonDataKey = "jsonData"
+
+ // MARK: Encoding
+
+ /// Creates a URL request by encoding parameters and applying them onto an existing request.
+ ///
+ /// - parameter urlRequest: The request to have parameters applied.
+ /// - parameter parameters: The parameters to apply. This should have a single key/value
+ /// pair with "jsonData" as the key and a Data object as the value.
+ ///
+ /// - throws: An `Error` if the encoding process encounters an error.
+ ///
+ /// - returns: The encoded request.
+ public func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) -> URLRequest {
+ var urlRequest = urlRequest
+
+ guard let jsonData = parameters?[JSONDataEncoding.jsonDataKey] as? Data, !jsonData.isEmpty else {
+ return urlRequest
+ }
+
+ if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
+ urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
+ }
+
+ urlRequest.httpBody = jsonData
+
+ return urlRequest
+ }
+
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
+ if let jsonData = jsonData, !jsonData.isEmpty {
+ var params: [String: Any] = [:]
+ params[jsonDataKey] = jsonData
+ returnedParams = params
+ }
+ return returnedParams
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
new file mode 100644
index 00000000000..02f78ffb470
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -0,0 +1,45 @@
+//
+// JSONEncodingHelper.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+open class JSONEncodingHelper {
+
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
+
+ // Encode the Encodable object
+ if let encodableObj = encodableObj {
+ let encodeResult = CodableHelper.encode(encodableObj)
+ do {
+ let data = try encodeResult.get()
+ params = JSONDataEncoding.encodingParameters(jsonData: data)
+ } catch {
+ print(error.localizedDescription)
+ }
+ }
+
+ return params
+ }
+
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
+
+ if let encodableObj = encodableObj {
+ do {
+ let data = try JSONSerialization.data(withJSONObject: encodableObj, options: .prettyPrinted)
+ params = JSONDataEncoding.encodingParameters(jsonData: data)
+ } catch {
+ print(error.localizedDescription)
+ return nil
+ }
+ }
+
+ return params
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models.swift
new file mode 100644
index 00000000000..b0bfb115976
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -0,0 +1,54 @@
+// Models.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+protocol JSONEncodable {
+ func encodeToJSON() -> Any
+}
+
+public enum ErrorResponse: Error {
+ case error(Int, Data?, Error)
+}
+
+public enum DownloadException: Error {
+ case responseDataMissing
+ case responseFailed
+ case requestMissing
+ case requestMissingPath
+ case requestMissingURL
+}
+
+public enum DecodableRequestBuilderError: Error {
+ case emptyDataResponse
+ case nilHTTPResponse
+ case unsuccessfulHTTPStatusCode
+ case jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
+open class Response {
+ public let statusCode: Int
+ public let header: [String: String]
+ public let body: T?
+
+ public init(statusCode: Int, header: [String: String], body: T?) {
+ self.statusCode = statusCode
+ self.header = header
+ self.body = body
+ }
+
+ public convenience init(response: HTTPURLResponse, body: T?) {
+ let rawHeader = response.allHeaderFields
+ var header = [String: String]()
+ for (key, value) in rawHeader {
+ if let key = key as? String, let value = value as? String {
+ header[key] = value
+ }
+ }
+ self.init(statusCode: response.statusCode, header: header, body: body)
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift
new file mode 100644
index 00000000000..3fda7052a7d
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift
@@ -0,0 +1,25 @@
+//
+// AdditionalPropertiesClass.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct AdditionalPropertiesClass: Codable {
+
+ public private(set) var mapString: [String: String]?
+ public private(set) var mapMapString: [String: [String: String]]?
+
+ public init(mapString: [String: String]?, mapMapString: [String: [String: String]]?) {
+ self.mapString = mapString
+ self.mapMapString = mapMapString
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case mapString = "map_string"
+ case mapMapString = "map_map_string"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift
new file mode 100644
index 00000000000..af59c2a9ef6
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift
@@ -0,0 +1,20 @@
+//
+// Animal.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Animal: Codable {
+
+ public private(set) var className: String
+ public private(set) var color: String? = "red"
+
+ public init(className: String, color: String?) {
+ self.className = className
+ self.color = color
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift
new file mode 100644
index 00000000000..e09b0e9efdc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift
@@ -0,0 +1,10 @@
+//
+// AnimalFarm.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public typealias AnimalFarm = [Animal]
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift
new file mode 100644
index 00000000000..a89768595cc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift
@@ -0,0 +1,22 @@
+//
+// ApiResponse.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct ApiResponse: Codable {
+
+ public private(set) var code: Int?
+ public private(set) var type: String?
+ public private(set) var message: String?
+
+ public init(code: Int?, type: String?, message: String?) {
+ self.code = code
+ self.type = type
+ self.message = message
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift
new file mode 100644
index 00000000000..a2593b7c1a3
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift
@@ -0,0 +1,22 @@
+//
+// ArrayOfArrayOfNumberOnly.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct ArrayOfArrayOfNumberOnly: Codable {
+
+ public private(set) var arrayArrayNumber: [[Double]]?
+
+ public init(arrayArrayNumber: [[Double]]?) {
+ self.arrayArrayNumber = arrayArrayNumber
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case arrayArrayNumber = "ArrayArrayNumber"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift
new file mode 100644
index 00000000000..c5edf110053
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift
@@ -0,0 +1,22 @@
+//
+// ArrayOfNumberOnly.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct ArrayOfNumberOnly: Codable {
+
+ public private(set) var arrayNumber: [Double]?
+
+ public init(arrayNumber: [Double]?) {
+ self.arrayNumber = arrayNumber
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case arrayNumber = "ArrayNumber"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift
new file mode 100644
index 00000000000..8ad39b8c09f
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift
@@ -0,0 +1,28 @@
+//
+// ArrayTest.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct ArrayTest: Codable {
+
+ public private(set) var arrayOfString: [String]?
+ public private(set) var arrayArrayOfInteger: [[Int64]]?
+ public private(set) var arrayArrayOfModel: [[ReadOnlyFirst]]?
+
+ public init(arrayOfString: [String]?, arrayArrayOfInteger: [[Int64]]?, arrayArrayOfModel: [[ReadOnlyFirst]]?) {
+ self.arrayOfString = arrayOfString
+ self.arrayArrayOfInteger = arrayArrayOfInteger
+ self.arrayArrayOfModel = arrayArrayOfModel
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case arrayOfString = "array_of_string"
+ case arrayArrayOfInteger = "array_array_of_integer"
+ case arrayArrayOfModel = "array_array_of_model"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift
new file mode 100644
index 00000000000..eb3d6777e52
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift
@@ -0,0 +1,38 @@
+//
+// Capitalization.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Capitalization: Codable {
+
+ public private(set) var smallCamel: String?
+ public private(set) var capitalCamel: String?
+ public private(set) var smallSnake: String?
+ public private(set) var capitalSnake: String?
+ public private(set) var sCAETHFlowPoints: String?
+ /** Name of the pet */
+ public private(set) var ATT_NAME: String?
+
+ public init(smallCamel: String?, capitalCamel: String?, smallSnake: String?, capitalSnake: String?, sCAETHFlowPoints: String?, ATT_NAME: String?) {
+ self.smallCamel = smallCamel
+ self.capitalCamel = capitalCamel
+ self.smallSnake = smallSnake
+ self.capitalSnake = capitalSnake
+ self.sCAETHFlowPoints = sCAETHFlowPoints
+ self.ATT_NAME = ATT_NAME
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case smallCamel
+ case capitalCamel = "CapitalCamel"
+ case smallSnake = "small_Snake"
+ case capitalSnake = "Capital_Snake"
+ case sCAETHFlowPoints = "SCA_ETH_Flow_Points"
+ case ATT_NAME
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift
new file mode 100644
index 00000000000..2978b016f98
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift
@@ -0,0 +1,22 @@
+//
+// Cat.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Cat: Codable {
+
+ public private(set) var className: String
+ public private(set) var color: String? = "red"
+ public private(set) var declawed: Bool?
+
+ public init(className: String, color: String?, declawed: Bool?) {
+ self.className = className
+ self.color = color
+ self.declawed = declawed
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift
new file mode 100644
index 00000000000..4ab80fbcd99
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift
@@ -0,0 +1,18 @@
+//
+// CatAllOf.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct CatAllOf: Codable {
+
+ public private(set) var declawed: Bool?
+
+ public init(declawed: Bool?) {
+ self.declawed = declawed
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift
new file mode 100644
index 00000000000..3482703a6b4
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift
@@ -0,0 +1,20 @@
+//
+// Category.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Category: Codable {
+
+ public private(set) var id: Int64?
+ public private(set) var name: String = "default-name"
+
+ public init(id: Int64?, name: String) {
+ self.id = id
+ self.name = name
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift
new file mode 100644
index 00000000000..319d88a70f7
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift
@@ -0,0 +1,19 @@
+//
+// ClassModel.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+/** Model for testing model with \"_class\" property */
+public struct ClassModel: Codable {
+
+ public private(set) var _class: String?
+
+ public init(_class: String?) {
+ self._class = _class
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift
new file mode 100644
index 00000000000..5dd8cc3062d
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift
@@ -0,0 +1,18 @@
+//
+// Client.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Client: Codable {
+
+ public private(set) var client: String?
+
+ public init(client: String?) {
+ self.client = client
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift
new file mode 100644
index 00000000000..16ab196b872
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift
@@ -0,0 +1,22 @@
+//
+// Dog.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Dog: Codable {
+
+ public private(set) var className: String
+ public private(set) var color: String? = "red"
+ public private(set) var breed: String?
+
+ public init(className: String, color: String?, breed: String?) {
+ self.className = className
+ self.color = color
+ self.breed = breed
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift
new file mode 100644
index 00000000000..d8a838725cb
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift
@@ -0,0 +1,18 @@
+//
+// DogAllOf.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct DogAllOf: Codable {
+
+ public private(set) var breed: String?
+
+ public init(breed: String?) {
+ self.breed = breed
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift
new file mode 100644
index 00000000000..d9ce69e9fc8
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift
@@ -0,0 +1,33 @@
+//
+// EnumArrays.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct EnumArrays: Codable {
+
+ public enum JustSymbol: String, Codable, CaseIterable {
+ case greaterThanOrEqualTo = ">="
+ case dollar = "$"
+ }
+ public enum ArrayEnum: String, Codable, CaseIterable {
+ case fish = "fish"
+ case crab = "crab"
+ }
+ public private(set) var justSymbol: JustSymbol?
+ public private(set) var arrayEnum: [ArrayEnum]?
+
+ public init(justSymbol: JustSymbol?, arrayEnum: [ArrayEnum]?) {
+ self.justSymbol = justSymbol
+ self.arrayEnum = arrayEnum
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case justSymbol = "just_symbol"
+ case arrayEnum = "array_enum"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift
new file mode 100644
index 00000000000..d4029d73f8a
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift
@@ -0,0 +1,14 @@
+//
+// EnumClass.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public enum EnumClass: String, Codable, CaseIterable {
+ case abc = "_abc"
+ case efg = "-efg"
+ case xyz = "(xyz)"
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift
new file mode 100644
index 00000000000..2b114d422d1
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift
@@ -0,0 +1,52 @@
+//
+// EnumTest.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct EnumTest: Codable {
+
+ public enum EnumString: String, Codable, CaseIterable {
+ case upper = "UPPER"
+ case lower = "lower"
+ case empty = ""
+ }
+ public enum EnumStringRequired: String, Codable, CaseIterable {
+ case upper = "UPPER"
+ case lower = "lower"
+ case empty = ""
+ }
+ public enum EnumInteger: Int, Codable, CaseIterable {
+ case _1 = 1
+ case number1 = -1
+ }
+ public enum EnumNumber: Double, Codable, CaseIterable {
+ case _11 = 1.1
+ case number12 = -1.2
+ }
+ public private(set) var enumString: EnumString?
+ public private(set) var enumStringRequired: EnumStringRequired
+ public private(set) var enumInteger: EnumInteger?
+ public private(set) var enumNumber: EnumNumber?
+ public private(set) var outerEnum: OuterEnum?
+
+ public init(enumString: EnumString?, enumStringRequired: EnumStringRequired, enumInteger: EnumInteger?, enumNumber: EnumNumber?, outerEnum: OuterEnum?) {
+ self.enumString = enumString
+ self.enumStringRequired = enumStringRequired
+ self.enumInteger = enumInteger
+ self.enumNumber = enumNumber
+ self.outerEnum = outerEnum
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case enumString = "enum_string"
+ case enumStringRequired = "enum_string_required"
+ case enumInteger = "enum_integer"
+ case enumNumber = "enum_number"
+ case outerEnum
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift
new file mode 100644
index 00000000000..eeab5819441
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift
@@ -0,0 +1,20 @@
+//
+// File.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+/** Must be named `File` for test. */
+public struct File: Codable {
+
+ /** Test capitalization */
+ public private(set) var sourceURI: String?
+
+ public init(sourceURI: String?) {
+ self.sourceURI = sourceURI
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift
new file mode 100644
index 00000000000..94574ca9955
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift
@@ -0,0 +1,20 @@
+//
+// FileSchemaTestClass.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct FileSchemaTestClass: Codable {
+
+ public private(set) var file: File?
+ public private(set) var files: [File]?
+
+ public init(file: File?, files: [File]?) {
+ self.file = file
+ self.files = files
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift
new file mode 100644
index 00000000000..57bbd464b51
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift
@@ -0,0 +1,42 @@
+//
+// FormatTest.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct FormatTest: Codable {
+
+ public private(set) var integer: Int?
+ public private(set) var int32: Int?
+ public private(set) var int64: Int64?
+ public private(set) var number: Double
+ public private(set) var float: Float?
+ public private(set) var double: Double?
+ public private(set) var string: String?
+ public private(set) var byte: Data
+ public private(set) var binary: URL?
+ public private(set) var date: Date
+ public private(set) var dateTime: Date?
+ public private(set) var uuid: UUID?
+ public private(set) var password: String
+
+ public init(integer: Int?, int32: Int?, int64: Int64?, number: Double, float: Float?, double: Double?, string: String?, byte: Data, binary: URL?, date: Date, dateTime: Date?, uuid: UUID?, password: String) {
+ self.integer = integer
+ self.int32 = int32
+ self.int64 = int64
+ self.number = number
+ self.float = float
+ self.double = double
+ self.string = string
+ self.byte = byte
+ self.binary = binary
+ self.date = date
+ self.dateTime = dateTime
+ self.uuid = uuid
+ self.password = password
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift
new file mode 100644
index 00000000000..4de261f092d
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift
@@ -0,0 +1,20 @@
+//
+// HasOnlyReadOnly.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct HasOnlyReadOnly: Codable {
+
+ public private(set) var bar: String?
+ public private(set) var foo: String?
+
+ public init(bar: String?, foo: String?) {
+ self.bar = bar
+ self.foo = foo
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift
new file mode 100644
index 00000000000..135160ff8de
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift
@@ -0,0 +1,22 @@
+//
+// List.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct List: Codable {
+
+ public private(set) var _123list: String?
+
+ public init(_123list: String?) {
+ self._123list = _123list
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case _123list = "123-list"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift
new file mode 100644
index 00000000000..ebd9dd5b5bc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift
@@ -0,0 +1,35 @@
+//
+// MapTest.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct MapTest: Codable {
+
+ public enum MapOfEnumString: String, Codable, CaseIterable {
+ case upper = "UPPER"
+ case lower = "lower"
+ }
+ public private(set) var mapMapOfString: [String: [String: String]]?
+ public private(set) var mapOfEnumString: [String: String]?
+ public private(set) var directMap: [String: Bool]?
+ public private(set) var indirectMap: StringBooleanMap?
+
+ public init(mapMapOfString: [String: [String: String]]?, mapOfEnumString: [String: String]?, directMap: [String: Bool]?, indirectMap: StringBooleanMap?) {
+ self.mapMapOfString = mapMapOfString
+ self.mapOfEnumString = mapOfEnumString
+ self.directMap = directMap
+ self.indirectMap = indirectMap
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case mapMapOfString = "map_map_of_string"
+ case mapOfEnumString = "map_of_enum_string"
+ case directMap = "direct_map"
+ case indirectMap = "indirect_map"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift
new file mode 100644
index 00000000000..dc1ee0461be
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift
@@ -0,0 +1,22 @@
+//
+// MixedPropertiesAndAdditionalPropertiesClass.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct MixedPropertiesAndAdditionalPropertiesClass: Codable {
+
+ public private(set) var uuid: UUID?
+ public private(set) var dateTime: Date?
+ public private(set) var map: [String: Animal]?
+
+ public init(uuid: UUID?, dateTime: Date?, map: [String: Animal]?) {
+ self.uuid = uuid
+ self.dateTime = dateTime
+ self.map = map
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift
new file mode 100644
index 00000000000..a0f7127ef65
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift
@@ -0,0 +1,26 @@
+//
+// Model200Response.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+/** Model for testing model name starting with number */
+public struct Model200Response: Codable {
+
+ public private(set) var name: Int?
+ public private(set) var _class: String?
+
+ public init(name: Int?, _class: String?) {
+ self.name = name
+ self._class = _class
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case name
+ case _class = "class"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift
new file mode 100644
index 00000000000..ee70b1f6ee9
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift
@@ -0,0 +1,32 @@
+//
+// Name.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+/** Model for testing model name same as property name */
+public struct Name: Codable {
+
+ public private(set) var name: Int
+ public private(set) var snakeCase: Int?
+ public private(set) var property: String?
+ public private(set) var _123number: Int?
+
+ public init(name: Int, snakeCase: Int?, property: String?, _123number: Int?) {
+ self.name = name
+ self.snakeCase = snakeCase
+ self.property = property
+ self._123number = _123number
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case name
+ case snakeCase = "snake_case"
+ case property
+ case _123number = "123Number"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift
new file mode 100644
index 00000000000..007dfab800c
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift
@@ -0,0 +1,22 @@
+//
+// NumberOnly.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct NumberOnly: Codable {
+
+ public private(set) var justNumber: Double?
+
+ public init(justNumber: Double?) {
+ self.justNumber = justNumber
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case justNumber = "JustNumber"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift
new file mode 100644
index 00000000000..41a1d7d664e
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift
@@ -0,0 +1,34 @@
+//
+// Order.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Order: Codable {
+
+ public enum Status: String, Codable, CaseIterable {
+ case placed = "placed"
+ case approved = "approved"
+ case delivered = "delivered"
+ }
+ public private(set) var id: Int64?
+ public private(set) var petId: Int64?
+ public private(set) var quantity: Int?
+ public private(set) var shipDate: Date?
+ /** Order Status */
+ public private(set) var status: Status?
+ public private(set) var complete: Bool? = false
+
+ public init(id: Int64?, petId: Int64?, quantity: Int?, shipDate: Date?, status: Status?, complete: Bool?) {
+ self.id = id
+ self.petId = petId
+ self.quantity = quantity
+ self.shipDate = shipDate
+ self.status = status
+ self.complete = complete
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift
new file mode 100644
index 00000000000..df6d2512d6e
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift
@@ -0,0 +1,28 @@
+//
+// OuterComposite.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct OuterComposite: Codable {
+
+ public private(set) var myNumber: Double?
+ public private(set) var myString: String?
+ public private(set) var myBoolean: Bool?
+
+ public init(myNumber: Double?, myString: String?, myBoolean: Bool?) {
+ self.myNumber = myNumber
+ self.myString = myString
+ self.myBoolean = myBoolean
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case myNumber = "my_number"
+ case myString = "my_string"
+ case myBoolean = "my_boolean"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift
new file mode 100644
index 00000000000..c3b778cbbed
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift
@@ -0,0 +1,14 @@
+//
+// OuterEnum.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public enum OuterEnum: String, Codable, CaseIterable {
+ case placed = "placed"
+ case approved = "approved"
+ case delivered = "delivered"
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift
new file mode 100644
index 00000000000..7b99ef33751
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift
@@ -0,0 +1,34 @@
+//
+// Pet.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Pet: Codable {
+
+ public enum Status: String, Codable, CaseIterable {
+ case available = "available"
+ case pending = "pending"
+ case sold = "sold"
+ }
+ public private(set) var id: Int64?
+ public private(set) var category: Category?
+ public private(set) var name: String
+ public private(set) var photoUrls: [String]
+ public private(set) var tags: [Tag]?
+ /** pet status in the store */
+ public private(set) var status: Status?
+
+ public init(id: Int64?, category: Category?, name: String, photoUrls: [String], tags: [Tag]?, status: Status?) {
+ self.id = id
+ self.category = category
+ self.name = name
+ self.photoUrls = photoUrls
+ self.tags = tags
+ self.status = status
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift
new file mode 100644
index 00000000000..30cd4837cc7
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift
@@ -0,0 +1,20 @@
+//
+// ReadOnlyFirst.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct ReadOnlyFirst: Codable {
+
+ public private(set) var bar: String?
+ public private(set) var baz: String?
+
+ public init(bar: String?, baz: String?) {
+ self.bar = bar
+ self.baz = baz
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift
new file mode 100644
index 00000000000..b28b6e99d77
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift
@@ -0,0 +1,23 @@
+//
+// Return.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+/** Model for testing reserved words */
+public struct Return: Codable {
+
+ public private(set) var _return: Int?
+
+ public init(_return: Int?) {
+ self._return = _return
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case _return = "return"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift
new file mode 100644
index 00000000000..266833a0dbc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift
@@ -0,0 +1,22 @@
+//
+// SpecialModelName.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct SpecialModelName: Codable {
+
+ public private(set) var specialPropertyName: Int64?
+
+ public init(specialPropertyName: Int64?) {
+ self.specialPropertyName = specialPropertyName
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case specialPropertyName = "$special[property.name]"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift
new file mode 100644
index 00000000000..dbd5afe2709
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift
@@ -0,0 +1,45 @@
+//
+// StringBooleanMap.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct StringBooleanMap: Codable {
+
+ public private(set) var additionalProperties: [String: Bool] = [:]
+
+ public subscript(key: String) -> Bool? {
+ get {
+ if let value = additionalProperties[key] {
+ return value
+ }
+ return nil
+ }
+
+ set {
+ additionalProperties[key] = newValue
+ }
+ }
+
+ // Encodable protocol methods
+
+ public func encode(to encoder: Encoder) throws {
+
+ var container = encoder.container(keyedBy: String.self)
+
+ try container.encodeMap(additionalProperties)
+ }
+
+ // Decodable protocol methods
+
+ public init(from decoder: Decoder) throws {
+ let container = try decoder.container(keyedBy: String.self)
+
+ var nonAdditionalPropertyKeys = Set()
+ additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys)
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift
new file mode 100644
index 00000000000..f827ccf107a
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift
@@ -0,0 +1,20 @@
+//
+// Tag.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct Tag: Codable {
+
+ public private(set) var id: Int64?
+ public private(set) var name: String?
+
+ public init(id: Int64?, name: String?) {
+ self.id = id
+ self.name = name
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift
new file mode 100644
index 00000000000..ed3641fdb2f
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift
@@ -0,0 +1,34 @@
+//
+// TypeHolderDefault.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct TypeHolderDefault: Codable {
+
+ public private(set) var stringItem: String = "what"
+ public private(set) var numberItem: Double
+ public private(set) var integerItem: Int
+ public private(set) var boolItem: Bool = true
+ public private(set) var arrayItem: [Int]
+
+ public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) {
+ self.stringItem = stringItem
+ self.numberItem = numberItem
+ self.integerItem = integerItem
+ self.boolItem = boolItem
+ self.arrayItem = arrayItem
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case stringItem = "string_item"
+ case numberItem = "number_item"
+ case integerItem = "integer_item"
+ case boolItem = "bool_item"
+ case arrayItem = "array_item"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift
new file mode 100644
index 00000000000..4985005bdaf
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift
@@ -0,0 +1,34 @@
+//
+// TypeHolderExample.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct TypeHolderExample: Codable {
+
+ public private(set) var stringItem: String
+ public private(set) var numberItem: Double
+ public private(set) var integerItem: Int
+ public private(set) var boolItem: Bool
+ public private(set) var arrayItem: [Int]
+
+ public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) {
+ self.stringItem = stringItem
+ self.numberItem = numberItem
+ self.integerItem = integerItem
+ self.boolItem = boolItem
+ self.arrayItem = arrayItem
+ }
+
+ public enum CodingKeys: String, CodingKey, CaseIterable {
+ case stringItem = "string_item"
+ case numberItem = "number_item"
+ case integerItem = "integer_item"
+ case boolItem = "bool_item"
+ case arrayItem = "array_item"
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift
new file mode 100644
index 00000000000..9fba7de8182
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift
@@ -0,0 +1,33 @@
+//
+// User.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+public struct User: Codable {
+
+ public private(set) var id: Int64?
+ public private(set) var username: String?
+ public private(set) var firstName: String?
+ public private(set) var lastName: String?
+ public private(set) var email: String?
+ public private(set) var password: String?
+ public private(set) var phone: String?
+ /** User Status */
+ public private(set) var userStatus: Int?
+
+ public init(id: Int64?, username: String?, firstName: String?, lastName: String?, email: String?, password: String?, phone: String?, userStatus: Int?) {
+ self.id = id
+ self.username = username
+ self.firstName = firstName
+ self.lastName = lastName
+ self.email = email
+ self.password = password
+ self.phone = phone
+ self.userStatus = userStatus
+ }
+
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift
new file mode 100644
index 00000000000..e06208074cd
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift
@@ -0,0 +1,44 @@
+//
+// OpenISO8601DateFormatter.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+// https://stackoverflow.com/a/50281094/976628
+public class OpenISO8601DateFormatter: DateFormatter {
+ static let withoutSeconds: DateFormatter = {
+ let formatter = DateFormatter()
+ formatter.calendar = Calendar(identifier: .iso8601)
+ formatter.locale = Locale(identifier: "en_US_POSIX")
+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
+ formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
+ return formatter
+ }()
+
+ private func setup() {
+ calendar = Calendar(identifier: .iso8601)
+ locale = Locale(identifier: "en_US_POSIX")
+ timeZone = TimeZone(secondsFromGMT: 0)
+ dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
+ }
+
+ override init() {
+ super.init()
+ setup()
+ }
+
+ required init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+ setup()
+ }
+
+ override public func date(from string: String) -> Date? {
+ if let result = super.date(from: string) {
+ return result
+ }
+ return OpenISO8601DateFormatter.withoutSeconds.date(from: string)
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 00000000000..acf7ff4031b
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
@@ -0,0 +1,36 @@
+// SynchronizedDictionary.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+
+internal struct SynchronizedDictionary {
+
+ private var dictionary = [K: V]()
+ private let queue = DispatchQueue(
+ label: "SynchronizedDictionary",
+ qos: DispatchQoS.userInitiated,
+ attributes: [DispatchQueue.Attributes.concurrent],
+ autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit,
+ target: nil
+ )
+
+ internal subscript(key: K) -> V? {
+ get {
+ var value: V?
+
+ queue.sync {
+ value = self.dictionary[key]
+ }
+
+ return value
+ }
+ set {
+ queue.sync(flags: DispatchWorkItemFlags.barrier) {
+ self.dictionary[key] = newValue
+ }
+ }
+ }
+}
diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift
new file mode 100644
index 00000000000..a31860adfde
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift
@@ -0,0 +1,577 @@
+// URLSessionImplementations.swift
+//
+// Generated by openapi-generator
+// https://openapi-generator.tech
+//
+
+import Foundation
+#if !os(macOS)
+import MobileCoreServices
+#endif
+
+class URLSessionRequestBuilderFactory: RequestBuilderFactory {
+ func getNonDecodableBuilder() -> RequestBuilder.Type {
+ return URLSessionRequestBuilder.self
+ }
+
+ func getBuilder() -> RequestBuilder.Type {
+ return URLSessionDecodableRequestBuilder.self
+ }
+}
+
+// Store the URLSession to retain its reference
+private var urlSessionStore = SynchronizedDictionary()
+
+open class URLSessionRequestBuilder: RequestBuilder {
+
+ let progress = Progress()
+
+ private var observation: NSKeyValueObservation?
+
+ deinit {
+ observation?.invalidate()
+ }
+
+ // swiftlint:disable:next weak_delegate
+ fileprivate let sessionDelegate = SessionDelegate()
+
+ /**
+ May be assigned if you want to control the authentication challenges.
+ */
+ public var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))?
+
+ /**
+ May be assigned if you want to do any of those things:
+ - control the task completion
+ - intercept and handle errors like authorization
+ - retry the request.
+ */
+ public var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)?
+
+ required public init(method: String, URLString: String, parameters: [String: Any]?, isBody: Bool, headers: [String: String] = [:]) {
+ super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody, headers: headers)
+ }
+
+ /**
+ May be overridden by a subclass if you want to control the URLSession
+ configuration.
+ */
+ open func createURLSession() -> URLSession {
+ let configuration = URLSessionConfiguration.default
+ configuration.httpAdditionalHeaders = buildHeaders()
+ sessionDelegate.credential = credential
+ sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
+ return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
+ }
+
+ /**
+ May be overridden by a subclass if you want to control the Content-Type
+ that is given to an uploaded form part.
+
+ Return nil to use the default behavior (inferring the Content-Type from
+ the file extension). Return the desired Content-Type otherwise.
+ */
+ open func contentTypeForFormPart(fileURL: URL) -> String? {
+ return nil
+ }
+
+ /**
+ May be overridden by a subclass if you want to control the URLRequest
+ configuration (e.g. to override the cache policy).
+ */
+ open func createURLRequest(urlSession: URLSession, method: HTTPMethod, encoding: ParameterEncoding, headers: [String: String]) throws -> URLRequest {
+
+ guard let url = URL(string: URLString) else {
+ throw DownloadException.requestMissingURL
+ }
+
+ var originalRequest = URLRequest(url: url)
+
+ originalRequest.httpMethod = method.rawValue
+
+ buildHeaders().forEach { key, value in
+ originalRequest.setValue(value, forHTTPHeaderField: key)
+ }
+
+ headers.forEach { key, value in
+ originalRequest.setValue(value, forHTTPHeaderField: key)
+ }
+
+ let modifiedRequest = try encoding.encode(originalRequest, with: parameters)
+
+ return modifiedRequest
+ }
+
+ override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) {
+ let urlSessionId: String = UUID().uuidString
+ // Create a new manager for each request to customize its request header
+ let urlSession = createURLSession()
+ urlSessionStore[urlSessionId] = urlSession
+
+ let parameters: [String: Any] = self.parameters ?? [:]
+
+ let fileKeys = parameters.filter { $1 is URL }
+ .map { $0.0 }
+
+ let encoding: ParameterEncoding
+ if fileKeys.count > 0 {
+ encoding = FileUploadEncoding(contentTypeForFormPart: contentTypeForFormPart(fileURL:))
+ } else if isBody {
+ encoding = JSONDataEncoding()
+ } else {
+ encoding = URLEncoding()
+ }
+
+ guard let xMethod = HTTPMethod(rawValue: method) else {
+ fatalError("Unsuported Http method - \(method)")
+ }
+
+ let cleanupRequest = {
+ urlSessionStore[urlSessionId] = nil
+ self.observation?.invalidate()
+ }
+
+ do {
+ let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers)
+
+ let dataTask = urlSession.dataTask(with: request) { [weak self] data, response, error in
+
+ guard let self = self else { return }
+
+ if let taskCompletionShouldRetry = self.taskCompletionShouldRetry {
+
+ taskCompletionShouldRetry(data, response, error) { [weak self] shouldRetry in
+
+ guard let self = self else { return }
+
+ if shouldRetry {
+ cleanupRequest()
+ self.execute(apiResponseQueue, completion)
+ } else {
+ apiResponseQueue.async {
+ self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
+ }
+ }
+ }
+ } else {
+ apiResponseQueue.async {
+ self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
+ }
+ }
+ }
+
+ if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) {
+ observation = dataTask.progress.observe(\.fractionCompleted) { newProgress, _ in
+ self.progress.totalUnitCount = newProgress.totalUnitCount
+ self.progress.completedUnitCount = newProgress.completedUnitCount
+ }
+
+ onProgressReady?(progress)
+ }
+
+ dataTask.resume()
+
+ } catch {
+ apiResponseQueue.async {
+ cleanupRequest()
+ completion(.failure(ErrorResponse.error(415, nil, error)))
+ }
+ }
+
+ }
+
+ fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) {
+
+ if let error = error {
+ completion(.failure(ErrorResponse.error(-1, data, error)))
+ return
+ }
+
+ guard let httpResponse = response as? HTTPURLResponse else {
+ completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse)))
+ return
+ }
+
+ guard httpResponse.isStatusCodeSuccessful else {
+ completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
+ return
+ }
+
+ switch T.self {
+ case is String.Type:
+
+ let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
+
+ completion(.success(Response(response: httpResponse, body: body as? T)))
+
+ case is URL.Type:
+ do {
+
+ guard error == nil else {
+ throw DownloadException.responseFailed
+ }
+
+ guard let data = data else {
+ throw DownloadException.responseDataMissing
+ }
+
+ let fileManager = FileManager.default
+ let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
+ let requestURL = try self.getURL(from: urlRequest)
+
+ var requestPath = try self.getPath(from: requestURL)
+
+ if let headerFileName = self.getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) {
+ requestPath = requestPath.appending("/\(headerFileName)")
+ }
+
+ let filePath = documentsDirectory.appendingPathComponent(requestPath)
+ let directoryPath = filePath.deletingLastPathComponent().path
+
+ try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil)
+ try data.write(to: filePath, options: .atomic)
+
+ completion(.success(Response(response: httpResponse, body: filePath as? T)))
+
+ } catch let requestParserError as DownloadException {
+ completion(.failure(ErrorResponse.error(400, data, requestParserError)))
+ } catch let error {
+ completion(.failure(ErrorResponse.error(400, data, error)))
+ }
+
+ case is Void.Type:
+
+ completion(.success(Response(response: httpResponse, body: nil)))
+
+ default:
+
+ completion(.success(Response(response: httpResponse, body: data as? T)))
+ }
+
+ }
+
+ open func buildHeaders() -> [String: String] {
+ var httpHeaders = PetstoreClientAPI.customHeaders
+ for (key, value) in self.headers {
+ httpHeaders[key] = value
+ }
+ return httpHeaders
+ }
+
+ fileprivate func getFileName(fromContentDisposition contentDisposition: String?) -> String? {
+
+ guard let contentDisposition = contentDisposition else {
+ return nil
+ }
+
+ let items = contentDisposition.components(separatedBy: ";")
+
+ var filename: String?
+
+ for contentItem in items {
+
+ let filenameKey = "filename="
+ guard let range = contentItem.range(of: filenameKey) else {
+ break
+ }
+
+ filename = contentItem
+ return filename?
+ .replacingCharacters(in: range, with: "")
+ .replacingOccurrences(of: "\"", with: "")
+ .trimmingCharacters(in: .whitespacesAndNewlines)
+ }
+
+ return filename
+
+ }
+
+ fileprivate func getPath(from url: URL) throws -> String {
+
+ guard var path = URLComponents(url: url, resolvingAgainstBaseURL: true)?.path else {
+ throw DownloadException.requestMissingPath
+ }
+
+ if path.hasPrefix("/") {
+ path.remove(at: path.startIndex)
+ }
+
+ return path
+
+ }
+
+ fileprivate func getURL(from urlRequest: URLRequest) throws -> URL {
+
+ guard let url = urlRequest.url else {
+ throw DownloadException.requestMissingURL
+ }
+
+ return url
+ }
+
+}
+
+open class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder {
+ override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) {
+
+ if let error = error {
+ completion(.failure(ErrorResponse.error(-1, data, error)))
+ return
+ }
+
+ guard let httpResponse = response as? HTTPURLResponse else {
+ completion(.failure(ErrorResponse.error(-2, data, DecodableRequestBuilderError.nilHTTPResponse)))
+ return
+ }
+
+ guard httpResponse.isStatusCodeSuccessful else {
+ completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode)))
+ return
+ }
+
+ switch T.self {
+ case is String.Type:
+
+ let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
+
+ completion(.success(Response(response: httpResponse, body: body as? T)))
+
+ case is Void.Type:
+
+ completion(.success(Response(response: httpResponse, body: nil)))
+
+ case is Data.Type:
+
+ completion(.success(Response(response: httpResponse, body: data as? T)))
+
+ default:
+
+ guard let data = data, !data.isEmpty else {
+ completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse)))
+ return
+ }
+
+ let decodeResult = CodableHelper.decode(T.self, from: data)
+
+ switch decodeResult {
+ case let .success(decodableObj):
+ completion(.success(Response(response: httpResponse, body: decodableObj)))
+ case let .failure(error):
+ completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, error)))
+ }
+ }
+ }
+}
+
+private class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate {
+
+ var credential: URLCredential?
+
+ var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))?
+
+ func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
+
+ var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling
+
+ var credential: URLCredential?
+
+ if let taskDidReceiveChallenge = taskDidReceiveChallenge {
+ (disposition, credential) = taskDidReceiveChallenge(session, task, challenge)
+ } else {
+ if challenge.previousFailureCount > 0 {
+ disposition = .rejectProtectionSpace
+ } else {
+ credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace)
+
+ if credential != nil {
+ disposition = .useCredential
+ }
+ }
+ }
+
+ completionHandler(disposition, credential)
+ }
+}
+
+public enum HTTPMethod: String {
+ case options = "OPTIONS"
+ case get = "GET"
+ case head = "HEAD"
+ case post = "POST"
+ case put = "PUT"
+ case patch = "PATCH"
+ case delete = "DELETE"
+ case trace = "TRACE"
+ case connect = "CONNECT"
+}
+
+public protocol ParameterEncoding {
+ func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest
+}
+
+private class URLEncoding: ParameterEncoding {
+ func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest {
+
+ var urlRequest = urlRequest
+
+ guard let parameters = parameters else { return urlRequest }
+
+ guard let url = urlRequest.url else {
+ throw DownloadException.requestMissingURL
+ }
+
+ if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty {
+ urlComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters)
+ urlRequest.url = urlComponents.url
+ }
+
+ return urlRequest
+ }
+}
+
+private class FileUploadEncoding: ParameterEncoding {
+
+ let contentTypeForFormPart: (_ fileURL: URL) -> String?
+
+ init(contentTypeForFormPart: @escaping (_ fileURL: URL) -> String?) {
+ self.contentTypeForFormPart = contentTypeForFormPart
+ }
+
+ func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest {
+
+ var urlRequest = urlRequest
+
+ guard let parameters = parameters, !parameters.isEmpty else {
+ return urlRequest
+ }
+
+ let boundary = "Boundary-\(UUID().uuidString)"
+
+ urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+ for (key, value) in parameters {
+ switch value {
+ case let fileURL as URL:
+
+ urlRequest = try configureFileUploadRequest(
+ urlRequest: urlRequest,
+ boundary: boundary,
+ name: key,
+ fileURL: fileURL
+ )
+
+ case let string as String:
+
+ if let data = string.data(using: .utf8) {
+ urlRequest = configureDataUploadRequest(
+ urlRequest: urlRequest,
+ boundary: boundary,
+ name: key,
+ data: data
+ )
+ }
+
+ case let number as NSNumber:
+
+ if let data = number.stringValue.data(using: .utf8) {
+ urlRequest = configureDataUploadRequest(
+ urlRequest: urlRequest,
+ boundary: boundary,
+ name: key,
+ data: data
+ )
+ }
+
+ default:
+ fatalError("Unprocessable value \(value) with key \(key)")
+ }
+ }
+
+ var body = urlRequest.httpBody.orEmpty
+
+ body.append("--\(boundary)--")
+
+ urlRequest.httpBody = body
+
+ return urlRequest
+ }
+
+ private func configureFileUploadRequest(urlRequest: URLRequest, boundary: String, name: String, fileURL: URL) throws -> URLRequest {
+
+ var urlRequest = urlRequest
+
+ var body = urlRequest.httpBody.orEmpty
+
+ let fileData = try Data(contentsOf: fileURL)
+
+ let mimetype = self.contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL)
+
+ let fileName = fileURL.lastPathComponent
+
+ body.append("--\(boundary)\r\n")
+ body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(fileName)\"\r\n\r\n")
+
+ body.append("Content-Type: \(mimetype)\r\n\r\n")
+
+ body.append(fileData)
+
+ body.append("\r\n\r\n")
+
+ urlRequest.httpBody = body
+
+ return urlRequest
+ }
+
+ private func configureDataUploadRequest(urlRequest: URLRequest, boundary: String, name: String, data: Data) -> URLRequest {
+
+ var urlRequest = urlRequest
+
+ var body = urlRequest.httpBody.orEmpty
+
+ body.append("--\(boundary)\r\n")
+ body.append("Content-Disposition: form-data; name=\"\(name)\"\r\n\r\n")
+
+ body.append(data)
+
+ body.append("\r\n\r\n")
+
+ urlRequest.httpBody = body
+
+ return urlRequest
+
+ }
+
+ func mimeType(for url: URL) -> String {
+ let pathExtension = url.pathExtension
+
+ if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
+ if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
+ return mimetype as String
+ }
+ }
+ return "application/octet-stream"
+ }
+
+}
+
+fileprivate extension Data {
+ /// Append string to Data
+ ///
+ /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to Data, and then add that data to the Data, this wraps it in a nice convenient little extension to Data. This converts using UTF-8.
+ ///
+ /// - parameter string: The string to be added to the `Data`.
+
+ mutating func append(_ string: String) {
+ if let data = string.data(using: .utf8) {
+ append(data)
+ }
+ }
+}
+
+fileprivate extension Optional where Wrapped == Data {
+ var orEmpty: Data {
+ self ?? Data()
+ }
+}
+
+extension JSONDataEncoding: ParameterEncoding {}
diff --git a/samples/client/petstore/swift5/readonlyProperties/README.md b/samples/client/petstore/swift5/readonlyProperties/README.md
new file mode 100644
index 00000000000..1725415f7e0
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/README.md
@@ -0,0 +1,141 @@
+# Swift5 API client for PetstoreClient
+
+This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+
+## Overview
+This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate an API client.
+
+- API version: 1.0.0
+- Package version:
+- Build package: org.openapitools.codegen.languages.Swift5ClientCodegen
+
+## Installation
+
+### Carthage
+
+Run `carthage update`
+
+### CocoaPods
+
+Run `pod install`
+
+## Documentation for API Endpoints
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*AnotherFakeAPI* | [**call123testSpecialTags**](docs/AnotherFakeAPI.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags
+*FakeAPI* | [**fakeOuterBooleanSerialize**](docs/FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean |
+*FakeAPI* | [**fakeOuterCompositeSerialize**](docs/FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite |
+*FakeAPI* | [**fakeOuterNumberSerialize**](docs/FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number |
+*FakeAPI* | [**fakeOuterStringSerialize**](docs/FakeAPI.md#fakeouterstringserialize) | **POST** /fake/outer/string |
+*FakeAPI* | [**testBodyWithFileSchema**](docs/FakeAPI.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema |
+*FakeAPI* | [**testBodyWithQueryParams**](docs/FakeAPI.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params |
+*FakeAPI* | [**testClientModel**](docs/FakeAPI.md#testclientmodel) | **PATCH** /fake | To test \"client\" model
+*FakeAPI* | [**testEndpointParameters**](docs/FakeAPI.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+*FakeAPI* | [**testEnumParameters**](docs/FakeAPI.md#testenumparameters) | **GET** /fake | To test enum parameters
+*FakeAPI* | [**testGroupParameters**](docs/FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional)
+*FakeAPI* | [**testInlineAdditionalProperties**](docs/FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties
+*FakeAPI* | [**testJsonFormData**](docs/FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data
+*FakeClassnameTags123API* | [**testClassname**](docs/FakeClassnameTags123API.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case
+*PetAPI* | [**addPet**](docs/PetAPI.md#addpet) | **POST** /pet | Add a new pet to the store
+*PetAPI* | [**deletePet**](docs/PetAPI.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet
+*PetAPI* | [**findPetsByStatus**](docs/PetAPI.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status
+*PetAPI* | [**findPetsByTags**](docs/PetAPI.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags
+*PetAPI* | [**getPetById**](docs/PetAPI.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID
+*PetAPI* | [**updatePet**](docs/PetAPI.md#updatepet) | **PUT** /pet | Update an existing pet
+*PetAPI* | [**updatePetWithForm**](docs/PetAPI.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data
+*PetAPI* | [**uploadFile**](docs/PetAPI.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image
+*PetAPI* | [**uploadFileWithRequiredFile**](docs/PetAPI.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required)
+*StoreAPI* | [**deleteOrder**](docs/StoreAPI.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID
+*StoreAPI* | [**getInventory**](docs/StoreAPI.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status
+*StoreAPI* | [**getOrderById**](docs/StoreAPI.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID
+*StoreAPI* | [**placeOrder**](docs/StoreAPI.md#placeorder) | **POST** /store/order | Place an order for a pet
+*UserAPI* | [**createUser**](docs/UserAPI.md#createuser) | **POST** /user | Create user
+*UserAPI* | [**createUsersWithArrayInput**](docs/UserAPI.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array
+*UserAPI* | [**createUsersWithListInput**](docs/UserAPI.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array
+*UserAPI* | [**deleteUser**](docs/UserAPI.md#deleteuser) | **DELETE** /user/{username} | Delete user
+*UserAPI* | [**getUserByName**](docs/UserAPI.md#getuserbyname) | **GET** /user/{username} | Get user by user name
+*UserAPI* | [**loginUser**](docs/UserAPI.md#loginuser) | **GET** /user/login | Logs user into the system
+*UserAPI* | [**logoutUser**](docs/UserAPI.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session
+*UserAPI* | [**updateUser**](docs/UserAPI.md#updateuser) | **PUT** /user/{username} | Updated user
+
+
+## Documentation For Models
+
+ - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
+ - [Animal](docs/Animal.md)
+ - [AnimalFarm](docs/AnimalFarm.md)
+ - [ApiResponse](docs/ApiResponse.md)
+ - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
+ - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
+ - [ArrayTest](docs/ArrayTest.md)
+ - [Capitalization](docs/Capitalization.md)
+ - [Cat](docs/Cat.md)
+ - [CatAllOf](docs/CatAllOf.md)
+ - [Category](docs/Category.md)
+ - [ClassModel](docs/ClassModel.md)
+ - [Client](docs/Client.md)
+ - [Dog](docs/Dog.md)
+ - [DogAllOf](docs/DogAllOf.md)
+ - [EnumArrays](docs/EnumArrays.md)
+ - [EnumClass](docs/EnumClass.md)
+ - [EnumTest](docs/EnumTest.md)
+ - [File](docs/File.md)
+ - [FileSchemaTestClass](docs/FileSchemaTestClass.md)
+ - [FormatTest](docs/FormatTest.md)
+ - [HasOnlyReadOnly](docs/HasOnlyReadOnly.md)
+ - [List](docs/List.md)
+ - [MapTest](docs/MapTest.md)
+ - [MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md)
+ - [Model200Response](docs/Model200Response.md)
+ - [Name](docs/Name.md)
+ - [NumberOnly](docs/NumberOnly.md)
+ - [Order](docs/Order.md)
+ - [OuterComposite](docs/OuterComposite.md)
+ - [OuterEnum](docs/OuterEnum.md)
+ - [Pet](docs/Pet.md)
+ - [ReadOnlyFirst](docs/ReadOnlyFirst.md)
+ - [Return](docs/Return.md)
+ - [SpecialModelName](docs/SpecialModelName.md)
+ - [StringBooleanMap](docs/StringBooleanMap.md)
+ - [Tag](docs/Tag.md)
+ - [TypeHolderDefault](docs/TypeHolderDefault.md)
+ - [TypeHolderExample](docs/TypeHolderExample.md)
+ - [User](docs/User.md)
+
+
+## Documentation For Authorization
+
+
+## api_key
+
+- **Type**: API key
+- **API key parameter name**: api_key
+- **Location**: HTTP header
+
+## api_key_query
+
+- **Type**: API key
+- **API key parameter name**: api_key_query
+- **Location**: URL query string
+
+## http_basic_test
+
+- **Type**: HTTP basic authentication
+
+## petstore_auth
+
+- **Type**: OAuth
+- **Flow**: implicit
+- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog
+- **Scopes**:
+ - **write:pets**: modify pets in your account
+ - **read:pets**: read your pets
+
+
+## Author
+
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/AdditionalPropertiesClass.md b/samples/client/petstore/swift5/readonlyProperties/docs/AdditionalPropertiesClass.md
new file mode 100644
index 00000000000..e22d28be1de
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/AdditionalPropertiesClass.md
@@ -0,0 +1,11 @@
+# AdditionalPropertiesClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**mapString** | **[String:String]** | | [optional]
+**mapMapString** | [String:[String:String]] | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Animal.md b/samples/client/petstore/swift5/readonlyProperties/docs/Animal.md
new file mode 100644
index 00000000000..69c601455cd
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Animal.md
@@ -0,0 +1,11 @@
+# Animal
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**className** | **String** | |
+**color** | **String** | | [optional] [default to "red"]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/AnimalFarm.md b/samples/client/petstore/swift5/readonlyProperties/docs/AnimalFarm.md
new file mode 100644
index 00000000000..df6bab21dae
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/AnimalFarm.md
@@ -0,0 +1,9 @@
+# AnimalFarm
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/AnotherFakeAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/AnotherFakeAPI.md
new file mode 100644
index 00000000000..aead5f1f980
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/AnotherFakeAPI.md
@@ -0,0 +1,59 @@
+# AnotherFakeAPI
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**call123testSpecialTags**](AnotherFakeAPI.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags
+
+
+# **call123testSpecialTags**
+```swift
+ open class func call123testSpecialTags(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void)
+```
+
+To test special tags
+
+To test special tags and operation ID starting with number
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Client(client: "client_example") // Client | client model
+
+// To test special tags
+AnotherFakeAPI.call123testSpecialTags(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Client**](Client.md) | client model |
+
+### Return type
+
+[**Client**](Client.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ApiResponse.md b/samples/client/petstore/swift5/readonlyProperties/docs/ApiResponse.md
new file mode 100644
index 00000000000..c6d9768fe9b
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ApiResponse.md
@@ -0,0 +1,12 @@
+# ApiResponse
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**code** | **Int** | | [optional]
+**type** | **String** | | [optional]
+**message** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfArrayOfNumberOnly.md b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfArrayOfNumberOnly.md
new file mode 100644
index 00000000000..c6fceff5e08
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfArrayOfNumberOnly.md
@@ -0,0 +1,10 @@
+# ArrayOfArrayOfNumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**arrayArrayNumber** | [[Double]] | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfNumberOnly.md b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfNumberOnly.md
new file mode 100644
index 00000000000..f09f8fa6f70
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayOfNumberOnly.md
@@ -0,0 +1,10 @@
+# ArrayOfNumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**arrayNumber** | **[Double]** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ArrayTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayTest.md
new file mode 100644
index 00000000000..bf416b8330c
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ArrayTest.md
@@ -0,0 +1,12 @@
+# ArrayTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**arrayOfString** | **[String]** | | [optional]
+**arrayArrayOfInteger** | [[Int64]] | | [optional]
+**arrayArrayOfModel** | [[ReadOnlyFirst]] | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Capitalization.md b/samples/client/petstore/swift5/readonlyProperties/docs/Capitalization.md
new file mode 100644
index 00000000000..95374216c77
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Capitalization.md
@@ -0,0 +1,15 @@
+# Capitalization
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**smallCamel** | **String** | | [optional]
+**capitalCamel** | **String** | | [optional]
+**smallSnake** | **String** | | [optional]
+**capitalSnake** | **String** | | [optional]
+**sCAETHFlowPoints** | **String** | | [optional]
+**ATT_NAME** | **String** | Name of the pet | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Cat.md b/samples/client/petstore/swift5/readonlyProperties/docs/Cat.md
new file mode 100644
index 00000000000..fb5949b1576
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Cat.md
@@ -0,0 +1,10 @@
+# Cat
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**declawed** | **Bool** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/CatAllOf.md b/samples/client/petstore/swift5/readonlyProperties/docs/CatAllOf.md
new file mode 100644
index 00000000000..79789be61c0
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/CatAllOf.md
@@ -0,0 +1,10 @@
+# CatAllOf
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**declawed** | **Bool** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Category.md b/samples/client/petstore/swift5/readonlyProperties/docs/Category.md
new file mode 100644
index 00000000000..5ca5408c0f9
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Category.md
@@ -0,0 +1,11 @@
+# Category
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Int64** | | [optional]
+**name** | **String** | | [default to "default-name"]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ClassModel.md b/samples/client/petstore/swift5/readonlyProperties/docs/ClassModel.md
new file mode 100644
index 00000000000..e3912fdf0fd
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ClassModel.md
@@ -0,0 +1,10 @@
+# ClassModel
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_class** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Client.md b/samples/client/petstore/swift5/readonlyProperties/docs/Client.md
new file mode 100644
index 00000000000..0de1b238c36
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Client.md
@@ -0,0 +1,10 @@
+# Client
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**client** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Dog.md b/samples/client/petstore/swift5/readonlyProperties/docs/Dog.md
new file mode 100644
index 00000000000..4824786da04
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Dog.md
@@ -0,0 +1,10 @@
+# Dog
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**breed** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/DogAllOf.md b/samples/client/petstore/swift5/readonlyProperties/docs/DogAllOf.md
new file mode 100644
index 00000000000..9302ef52e93
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/DogAllOf.md
@@ -0,0 +1,10 @@
+# DogAllOf
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**breed** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/EnumArrays.md b/samples/client/petstore/swift5/readonlyProperties/docs/EnumArrays.md
new file mode 100644
index 00000000000..b9a9807d3c8
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/EnumArrays.md
@@ -0,0 +1,11 @@
+# EnumArrays
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**justSymbol** | **String** | | [optional]
+**arrayEnum** | **[String]** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/EnumClass.md b/samples/client/petstore/swift5/readonlyProperties/docs/EnumClass.md
new file mode 100644
index 00000000000..67f017becd0
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/EnumClass.md
@@ -0,0 +1,9 @@
+# EnumClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/EnumTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/EnumTest.md
new file mode 100644
index 00000000000..bc9b036dd76
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/EnumTest.md
@@ -0,0 +1,14 @@
+# EnumTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**enumString** | **String** | | [optional]
+**enumStringRequired** | **String** | |
+**enumInteger** | **Int** | | [optional]
+**enumNumber** | **Double** | | [optional]
+**outerEnum** | [**OuterEnum**](OuterEnum.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md
new file mode 100644
index 00000000000..d0ab705d4e4
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md
@@ -0,0 +1,662 @@
+# FakeAPI
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**fakeOuterBooleanSerialize**](FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean |
+[**fakeOuterCompositeSerialize**](FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite |
+[**fakeOuterNumberSerialize**](FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number |
+[**fakeOuterStringSerialize**](FakeAPI.md#fakeouterstringserialize) | **POST** /fake/outer/string |
+[**testBodyWithFileSchema**](FakeAPI.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema |
+[**testBodyWithQueryParams**](FakeAPI.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params |
+[**testClientModel**](FakeAPI.md#testclientmodel) | **PATCH** /fake | To test \"client\" model
+[**testEndpointParameters**](FakeAPI.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+[**testEnumParameters**](FakeAPI.md#testenumparameters) | **GET** /fake | To test enum parameters
+[**testGroupParameters**](FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional)
+[**testInlineAdditionalProperties**](FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties
+[**testJsonFormData**](FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data
+
+
+# **fakeOuterBooleanSerialize**
+```swift
+ open class func fakeOuterBooleanSerialize(body: Bool? = nil, completion: @escaping (_ data: Bool?, _ error: Error?) -> Void)
+```
+
+
+
+Test serialization of outer boolean types
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = true // Bool | Input boolean as post body (optional)
+
+FakeAPI.fakeOuterBooleanSerialize(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **Bool** | Input boolean as post body | [optional]
+
+### Return type
+
+**Bool**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: */*
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fakeOuterCompositeSerialize**
+```swift
+ open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, completion: @escaping (_ data: OuterComposite?, _ error: Error?) -> Void)
+```
+
+
+
+Test serialization of object with outer number type
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = OuterComposite(myNumber: 123, myString: "myString_example", myBoolean: false) // OuterComposite | Input composite as post body (optional)
+
+FakeAPI.fakeOuterCompositeSerialize(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**OuterComposite**](OuterComposite.md) | Input composite as post body | [optional]
+
+### Return type
+
+[**OuterComposite**](OuterComposite.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: */*
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fakeOuterNumberSerialize**
+```swift
+ open class func fakeOuterNumberSerialize(body: Double? = nil, completion: @escaping (_ data: Double?, _ error: Error?) -> Void)
+```
+
+
+
+Test serialization of outer number types
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = 987 // Double | Input number as post body (optional)
+
+FakeAPI.fakeOuterNumberSerialize(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **Double** | Input number as post body | [optional]
+
+### Return type
+
+**Double**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: */*
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **fakeOuterStringSerialize**
+```swift
+ open class func fakeOuterStringSerialize(body: String? = nil, completion: @escaping (_ data: String?, _ error: Error?) -> Void)
+```
+
+
+
+Test serialization of outer string types
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = "body_example" // String | Input string as post body (optional)
+
+FakeAPI.fakeOuterStringSerialize(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | **String** | Input string as post body | [optional]
+
+### Return type
+
+**String**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: */*
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testBodyWithFileSchema**
+```swift
+ open class func testBodyWithFileSchema(body: FileSchemaTestClass, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+
+
+For this test, the body for this request much reference a schema named `File`.
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = FileSchemaTestClass(file: File(sourceURI: "sourceURI_example"), files: [File(sourceURI: "sourceURI_example")]) // FileSchemaTestClass |
+
+FakeAPI.testBodyWithFileSchema(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**FileSchemaTestClass**](FileSchemaTestClass.md) | |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testBodyWithQueryParams**
+```swift
+ open class func testBodyWithQueryParams(query: String, body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let query = "query_example" // String |
+let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User |
+
+FakeAPI.testBodyWithQueryParams(query: query, body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **query** | **String** | |
+ **body** | [**User**](User.md) | |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testClientModel**
+```swift
+ open class func testClientModel(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void)
+```
+
+To test \"client\" model
+
+To test \"client\" model
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Client(client: "client_example") // Client | client model
+
+// To test \"client\" model
+FakeAPI.testClientModel(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Client**](Client.md) | client model |
+
+### Return type
+
+[**Client**](Client.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testEndpointParameters**
+```swift
+ open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+
+Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let number = 987 // Double | None
+let double = 987 // Double | None
+let patternWithoutDelimiter = "patternWithoutDelimiter_example" // String | None
+let byte = 987 // Data | None
+let integer = 987 // Int | None (optional)
+let int32 = 987 // Int | None (optional)
+let int64 = 987 // Int64 | None (optional)
+let float = 987 // Float | None (optional)
+let string = "string_example" // String | None (optional)
+let binary = URL(string: "https://example.com")! // URL | None (optional)
+let date = Date() // Date | None (optional)
+let dateTime = Date() // Date | None (optional)
+let password = "password_example" // String | None (optional)
+let callback = "callback_example" // String | None (optional)
+
+// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
+FakeAPI.testEndpointParameters(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **number** | **Double** | None |
+ **double** | **Double** | None |
+ **patternWithoutDelimiter** | **String** | None |
+ **byte** | **Data** | None |
+ **integer** | **Int** | None | [optional]
+ **int32** | **Int** | None | [optional]
+ **int64** | **Int64** | None | [optional]
+ **float** | **Float** | None | [optional]
+ **string** | **String** | None | [optional]
+ **binary** | **URL** | None | [optional]
+ **date** | **Date** | None | [optional]
+ **dateTime** | **Date** | None | [optional]
+ **password** | **String** | None | [optional]
+ **callback** | **String** | None | [optional]
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+[http_basic_test](../README.md#http_basic_test)
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testEnumParameters**
+```swift
+ open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+To test enum parameters
+
+To test enum parameters
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let enumHeaderStringArray = ["enumHeaderStringArray_example"] // [String] | Header parameter enum test (string array) (optional)
+let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .efg)
+let enumQueryStringArray = ["enumQueryStringArray_example"] // [String] | Query parameter enum test (string array) (optional)
+let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .efg)
+let enumQueryInteger = 987 // Int | Query parameter enum test (double) (optional)
+let enumQueryDouble = 987 // Double | Query parameter enum test (double) (optional)
+let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .dollar)
+let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .efg)
+
+// To test enum parameters
+FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **enumHeaderStringArray** | [**[String]**](String.md) | Header parameter enum test (string array) | [optional]
+ **enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .efg]
+ **enumQueryStringArray** | [**[String]**](String.md) | Query parameter enum test (string array) | [optional]
+ **enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .efg]
+ **enumQueryInteger** | **Int** | Query parameter enum test (double) | [optional]
+ **enumQueryDouble** | **Double** | Query parameter enum test (double) | [optional]
+ **enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .dollar]
+ **enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .efg]
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testGroupParameters**
+```swift
+ open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Fake endpoint to test group parameters (optional)
+
+Fake endpoint to test group parameters (optional)
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let requiredStringGroup = 987 // Int | Required String in group parameters
+let requiredBooleanGroup = true // Bool | Required Boolean in group parameters
+let requiredInt64Group = 987 // Int64 | Required Integer in group parameters
+let stringGroup = 987 // Int | String in group parameters (optional)
+let booleanGroup = true // Bool | Boolean in group parameters (optional)
+let int64Group = 987 // Int64 | Integer in group parameters (optional)
+
+// Fake endpoint to test group parameters (optional)
+FakeAPI.testGroupParameters(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **requiredStringGroup** | **Int** | Required String in group parameters |
+ **requiredBooleanGroup** | **Bool** | Required Boolean in group parameters |
+ **requiredInt64Group** | **Int64** | Required Integer in group parameters |
+ **stringGroup** | **Int** | String in group parameters | [optional]
+ **booleanGroup** | **Bool** | Boolean in group parameters | [optional]
+ **int64Group** | **Int64** | Integer in group parameters | [optional]
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testInlineAdditionalProperties**
+```swift
+ open class func testInlineAdditionalProperties(param: [String:String], completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+test inline additionalProperties
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let param = "TODO" // [String:String] | request body
+
+// test inline additionalProperties
+FakeAPI.testInlineAdditionalProperties(param: param) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **param** | [**[String:String]**](String.md) | request body |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **testJsonFormData**
+```swift
+ open class func testJsonFormData(param: String, param2: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+test json serialization of form data
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let param = "param_example" // String | field1
+let param2 = "param2_example" // String | field2
+
+// test json serialization of form data
+FakeAPI.testJsonFormData(param: param, param2: param2) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **param** | **String** | field1 |
+ **param2** | **String** | field2 |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FakeClassnameTags123API.md b/samples/client/petstore/swift5/readonlyProperties/docs/FakeClassnameTags123API.md
new file mode 100644
index 00000000000..9f24b46edbc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/FakeClassnameTags123API.md
@@ -0,0 +1,59 @@
+# FakeClassnameTags123API
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**testClassname**](FakeClassnameTags123API.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case
+
+
+# **testClassname**
+```swift
+ open class func testClassname(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void)
+```
+
+To test class name in snake case
+
+To test class name in snake case
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Client(client: "client_example") // Client | client model
+
+// To test class name in snake case
+FakeClassnameTags123API.testClassname(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Client**](Client.md) | client model |
+
+### Return type
+
+[**Client**](Client.md)
+
+### Authorization
+
+[api_key_query](../README.md#api_key_query)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/File.md b/samples/client/petstore/swift5/readonlyProperties/docs/File.md
new file mode 100644
index 00000000000..3edfef17b79
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/File.md
@@ -0,0 +1,10 @@
+# File
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**sourceURI** | **String** | Test capitalization | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FileSchemaTestClass.md b/samples/client/petstore/swift5/readonlyProperties/docs/FileSchemaTestClass.md
new file mode 100644
index 00000000000..afdacc60b2c
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/FileSchemaTestClass.md
@@ -0,0 +1,11 @@
+# FileSchemaTestClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**file** | [**File**](File.md) | | [optional]
+**files** | [File] | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md
new file mode 100644
index 00000000000..f74d94f6c46
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md
@@ -0,0 +1,22 @@
+# FormatTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**integer** | **Int** | | [optional]
+**int32** | **Int** | | [optional]
+**int64** | **Int64** | | [optional]
+**number** | **Double** | |
+**float** | **Float** | | [optional]
+**double** | **Double** | | [optional]
+**string** | **String** | | [optional]
+**byte** | **Data** | |
+**binary** | **URL** | | [optional]
+**date** | **Date** | |
+**dateTime** | **Date** | | [optional]
+**uuid** | **UUID** | | [optional]
+**password** | **String** | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/HasOnlyReadOnly.md b/samples/client/petstore/swift5/readonlyProperties/docs/HasOnlyReadOnly.md
new file mode 100644
index 00000000000..57b6e3a17e6
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/HasOnlyReadOnly.md
@@ -0,0 +1,11 @@
+# HasOnlyReadOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bar** | **String** | | [optional] [readonly]
+**foo** | **String** | | [optional] [readonly]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/List.md b/samples/client/petstore/swift5/readonlyProperties/docs/List.md
new file mode 100644
index 00000000000..b77718302ed
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/List.md
@@ -0,0 +1,10 @@
+# List
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_123list** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/MapTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/MapTest.md
new file mode 100644
index 00000000000..56213c4113f
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/MapTest.md
@@ -0,0 +1,13 @@
+# MapTest
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**mapMapOfString** | [String:[String:String]] | | [optional]
+**mapOfEnumString** | **[String:String]** | | [optional]
+**directMap** | **[String:Bool]** | | [optional]
+**indirectMap** | [**StringBooleanMap**](StringBooleanMap.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/swift5/readonlyProperties/docs/MixedPropertiesAndAdditionalPropertiesClass.md
new file mode 100644
index 00000000000..fcffb8ecdbf
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/MixedPropertiesAndAdditionalPropertiesClass.md
@@ -0,0 +1,12 @@
+# MixedPropertiesAndAdditionalPropertiesClass
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uuid** | **UUID** | | [optional]
+**dateTime** | **Date** | | [optional]
+**map** | [String:Animal] | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Model200Response.md b/samples/client/petstore/swift5/readonlyProperties/docs/Model200Response.md
new file mode 100644
index 00000000000..5865ea690cc
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Model200Response.md
@@ -0,0 +1,11 @@
+# Model200Response
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **Int** | | [optional]
+**_class** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Name.md b/samples/client/petstore/swift5/readonlyProperties/docs/Name.md
new file mode 100644
index 00000000000..f7b180292cd
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Name.md
@@ -0,0 +1,13 @@
+# Name
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **Int** | |
+**snakeCase** | **Int** | | [optional] [readonly]
+**property** | **String** | | [optional]
+**_123number** | **Int** | | [optional] [readonly]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/NumberOnly.md b/samples/client/petstore/swift5/readonlyProperties/docs/NumberOnly.md
new file mode 100644
index 00000000000..72bd361168b
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/NumberOnly.md
@@ -0,0 +1,10 @@
+# NumberOnly
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**justNumber** | **Double** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Order.md b/samples/client/petstore/swift5/readonlyProperties/docs/Order.md
new file mode 100644
index 00000000000..15487f01175
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Order.md
@@ -0,0 +1,15 @@
+# Order
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Int64** | | [optional]
+**petId** | **Int64** | | [optional]
+**quantity** | **Int** | | [optional]
+**shipDate** | **Date** | | [optional]
+**status** | **String** | Order Status | [optional]
+**complete** | **Bool** | | [optional] [default to false]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/OuterComposite.md b/samples/client/petstore/swift5/readonlyProperties/docs/OuterComposite.md
new file mode 100644
index 00000000000..d6b3583bc3f
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/OuterComposite.md
@@ -0,0 +1,12 @@
+# OuterComposite
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**myNumber** | **Double** | | [optional]
+**myString** | **String** | | [optional]
+**myBoolean** | **Bool** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/OuterEnum.md b/samples/client/petstore/swift5/readonlyProperties/docs/OuterEnum.md
new file mode 100644
index 00000000000..06d413b0168
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/OuterEnum.md
@@ -0,0 +1,9 @@
+# OuterEnum
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Pet.md b/samples/client/petstore/swift5/readonlyProperties/docs/Pet.md
new file mode 100644
index 00000000000..5c05f98fad4
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Pet.md
@@ -0,0 +1,15 @@
+# Pet
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Int64** | | [optional]
+**category** | [**Category**](Category.md) | | [optional]
+**name** | **String** | |
+**photoUrls** | **[String]** | |
+**tags** | [Tag] | | [optional]
+**status** | **String** | pet status in the store | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md
new file mode 100644
index 00000000000..27efe083347
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md
@@ -0,0 +1,469 @@
+# PetAPI
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**addPet**](PetAPI.md#addpet) | **POST** /pet | Add a new pet to the store
+[**deletePet**](PetAPI.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet
+[**findPetsByStatus**](PetAPI.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status
+[**findPetsByTags**](PetAPI.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags
+[**getPetById**](PetAPI.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID
+[**updatePet**](PetAPI.md#updatepet) | **PUT** /pet | Update an existing pet
+[**updatePetWithForm**](PetAPI.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data
+[**uploadFile**](PetAPI.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image
+[**uploadFileWithRequiredFile**](PetAPI.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required)
+
+
+# **addPet**
+```swift
+ open class func addPet(body: Pet, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Add a new pet to the store
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Pet(id: 123, category: Category(id: 123, name: "name_example"), name: "name_example", photoUrls: ["photoUrls_example"], tags: [Tag(id: 123, name: "name_example")], status: "status_example") // Pet | Pet object that needs to be added to the store
+
+// Add a new pet to the store
+PetAPI.addPet(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **deletePet**
+```swift
+ open class func deletePet(petId: Int64, apiKey: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Deletes a pet
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let petId = 987 // Int64 | Pet id to delete
+let apiKey = "apiKey_example" // String | (optional)
+
+// Deletes a pet
+PetAPI.deletePet(petId: petId, apiKey: apiKey) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **Int64** | Pet id to delete |
+ **apiKey** | **String** | | [optional]
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **findPetsByStatus**
+```swift
+ open class func findPetsByStatus(status: [String], completion: @escaping (_ data: [Pet]?, _ error: Error?) -> Void)
+```
+
+Finds Pets by status
+
+Multiple status values can be provided with comma separated strings
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let status = ["status_example"] // [String] | Status values that need to be considered for filter
+
+// Finds Pets by status
+PetAPI.findPetsByStatus(status: status) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **status** | [**[String]**](String.md) | Status values that need to be considered for filter |
+
+### Return type
+
+[**[Pet]**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **findPetsByTags**
+```swift
+ open class func findPetsByTags(tags: [String], completion: @escaping (_ data: [Pet]?, _ error: Error?) -> Void)
+```
+
+Finds Pets by tags
+
+Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let tags = ["inner_example"] // [String] | Tags to filter by
+
+// Finds Pets by tags
+PetAPI.findPetsByTags(tags: tags) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **tags** | [**[String]**](String.md) | Tags to filter by |
+
+### Return type
+
+[**[Pet]**](Pet.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getPetById**
+```swift
+ open class func getPetById(petId: Int64, completion: @escaping (_ data: Pet?, _ error: Error?) -> Void)
+```
+
+Find pet by ID
+
+Returns a single pet
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let petId = 987 // Int64 | ID of pet to return
+
+// Find pet by ID
+PetAPI.getPetById(petId: petId) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **Int64** | ID of pet to return |
+
+### Return type
+
+[**Pet**](Pet.md)
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **updatePet**
+```swift
+ open class func updatePet(body: Pet, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Update an existing pet
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Pet(id: 123, category: Category(id: 123, name: "name_example"), name: "name_example", photoUrls: ["photoUrls_example"], tags: [Tag(id: 123, name: "name_example")], status: "status_example") // Pet | Pet object that needs to be added to the store
+
+// Update an existing pet
+PetAPI.updatePet(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json, application/xml
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **updatePetWithForm**
+```swift
+ open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Updates a pet in the store with form data
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let petId = 987 // Int64 | ID of pet that needs to be updated
+let name = "name_example" // String | Updated name of the pet (optional)
+let status = "status_example" // String | Updated status of the pet (optional)
+
+// Updates a pet in the store with form data
+PetAPI.updatePetWithForm(petId: petId, name: name, status: status) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **Int64** | ID of pet that needs to be updated |
+ **name** | **String** | Updated name of the pet | [optional]
+ **status** | **String** | Updated status of the pet | [optional]
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: application/x-www-form-urlencoded
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **uploadFile**
+```swift
+ open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void)
+```
+
+uploads an image
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let petId = 987 // Int64 | ID of pet to update
+let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional)
+let file = URL(string: "https://example.com")! // URL | file to upload (optional)
+
+// uploads an image
+PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **Int64** | ID of pet to update |
+ **additionalMetadata** | **String** | Additional data to pass to server | [optional]
+ **file** | **URL** | file to upload | [optional]
+
+### Return type
+
+[**ApiResponse**](ApiResponse.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **uploadFileWithRequiredFile**
+```swift
+ open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void)
+```
+
+uploads an image (required)
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let petId = 987 // Int64 | ID of pet to update
+let requiredFile = URL(string: "https://example.com")! // URL | file to upload
+let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional)
+
+// uploads an image (required)
+PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **petId** | **Int64** | ID of pet to update |
+ **requiredFile** | **URL** | file to upload |
+ **additionalMetadata** | **String** | Additional data to pass to server | [optional]
+
+### Return type
+
+[**ApiResponse**](ApiResponse.md)
+
+### Authorization
+
+[petstore_auth](../README.md#petstore_auth)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/ReadOnlyFirst.md b/samples/client/petstore/swift5/readonlyProperties/docs/ReadOnlyFirst.md
new file mode 100644
index 00000000000..ed537b87598
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/ReadOnlyFirst.md
@@ -0,0 +1,11 @@
+# ReadOnlyFirst
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**bar** | **String** | | [optional] [readonly]
+**baz** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Return.md b/samples/client/petstore/swift5/readonlyProperties/docs/Return.md
new file mode 100644
index 00000000000..66d17c27c88
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Return.md
@@ -0,0 +1,10 @@
+# Return
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**_return** | **Int** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/SpecialModelName.md b/samples/client/petstore/swift5/readonlyProperties/docs/SpecialModelName.md
new file mode 100644
index 00000000000..3ec27a38c2a
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/SpecialModelName.md
@@ -0,0 +1,10 @@
+# SpecialModelName
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**specialPropertyName** | **Int64** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/StoreAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/StoreAPI.md
new file mode 100644
index 00000000000..36365ca5199
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/StoreAPI.md
@@ -0,0 +1,206 @@
+# StoreAPI
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**deleteOrder**](StoreAPI.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID
+[**getInventory**](StoreAPI.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status
+[**getOrderById**](StoreAPI.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID
+[**placeOrder**](StoreAPI.md#placeorder) | **POST** /store/order | Place an order for a pet
+
+
+# **deleteOrder**
+```swift
+ open class func deleteOrder(orderId: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Delete purchase order by ID
+
+For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let orderId = "orderId_example" // String | ID of the order that needs to be deleted
+
+// Delete purchase order by ID
+StoreAPI.deleteOrder(orderId: orderId) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **orderId** | **String** | ID of the order that needs to be deleted |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getInventory**
+```swift
+ open class func getInventory(completion: @escaping (_ data: [String:Int]?, _ error: Error?) -> Void)
+```
+
+Returns pet inventories by status
+
+Returns a map of status codes to quantities
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+
+// Returns pet inventories by status
+StoreAPI.getInventory() { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+**[String:Int]**
+
+### Authorization
+
+[api_key](../README.md#api_key)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getOrderById**
+```swift
+ open class func getOrderById(orderId: Int64, completion: @escaping (_ data: Order?, _ error: Error?) -> Void)
+```
+
+Find purchase order by ID
+
+For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let orderId = 987 // Int64 | ID of pet that needs to be fetched
+
+// Find purchase order by ID
+StoreAPI.getOrderById(orderId: orderId) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **orderId** | **Int64** | ID of pet that needs to be fetched |
+
+### Return type
+
+[**Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **placeOrder**
+```swift
+ open class func placeOrder(body: Order, completion: @escaping (_ data: Order?, _ error: Error?) -> Void)
+```
+
+Place an order for a pet
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = Order(id: 123, petId: 123, quantity: 123, shipDate: Date(), status: "status_example", complete: false) // Order | order placed for purchasing the pet
+
+// Place an order for a pet
+StoreAPI.placeOrder(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**Order**](Order.md) | order placed for purchasing the pet |
+
+### Return type
+
+[**Order**](Order.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/StringBooleanMap.md b/samples/client/petstore/swift5/readonlyProperties/docs/StringBooleanMap.md
new file mode 100644
index 00000000000..7abf11ec68b
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/StringBooleanMap.md
@@ -0,0 +1,9 @@
+# StringBooleanMap
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/Tag.md b/samples/client/petstore/swift5/readonlyProperties/docs/Tag.md
new file mode 100644
index 00000000000..ff4ac8aa451
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/Tag.md
@@ -0,0 +1,11 @@
+# Tag
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Int64** | | [optional]
+**name** | **String** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderDefault.md b/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderDefault.md
new file mode 100644
index 00000000000..5161394bdc3
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderDefault.md
@@ -0,0 +1,14 @@
+# TypeHolderDefault
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**stringItem** | **String** | | [default to "what"]
+**numberItem** | **Double** | |
+**integerItem** | **Int** | |
+**boolItem** | **Bool** | | [default to true]
+**arrayItem** | **[Int]** | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderExample.md b/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderExample.md
new file mode 100644
index 00000000000..46d0471cd71
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/TypeHolderExample.md
@@ -0,0 +1,14 @@
+# TypeHolderExample
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**stringItem** | **String** | |
+**numberItem** | **Double** | |
+**integerItem** | **Int** | |
+**boolItem** | **Bool** | |
+**arrayItem** | **[Int]** | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/User.md b/samples/client/petstore/swift5/readonlyProperties/docs/User.md
new file mode 100644
index 00000000000..5a439de0ff9
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/User.md
@@ -0,0 +1,17 @@
+# User
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Int64** | | [optional]
+**username** | **String** | | [optional]
+**firstName** | **String** | | [optional]
+**lastName** | **String** | | [optional]
+**email** | **String** | | [optional]
+**password** | **String** | | [optional]
+**phone** | **String** | | [optional]
+**userStatus** | **Int** | User Status | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/UserAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/UserAPI.md
new file mode 100644
index 00000000000..380813bc68c
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/docs/UserAPI.md
@@ -0,0 +1,406 @@
+# UserAPI
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createUser**](UserAPI.md#createuser) | **POST** /user | Create user
+[**createUsersWithArrayInput**](UserAPI.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array
+[**createUsersWithListInput**](UserAPI.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array
+[**deleteUser**](UserAPI.md#deleteuser) | **DELETE** /user/{username} | Delete user
+[**getUserByName**](UserAPI.md#getuserbyname) | **GET** /user/{username} | Get user by user name
+[**loginUser**](UserAPI.md#loginuser) | **GET** /user/login | Logs user into the system
+[**logoutUser**](UserAPI.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session
+[**updateUser**](UserAPI.md#updateuser) | **PUT** /user/{username} | Updated user
+
+
+# **createUser**
+```swift
+ open class func createUser(body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Create user
+
+This can only be done by the logged in user.
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User | Created user object
+
+// Create user
+UserAPI.createUser(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**User**](User.md) | Created user object |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **createUsersWithArrayInput**
+```swift
+ open class func createUsersWithArrayInput(body: [User], completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Creates list of users with given input array
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = [User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123)] // [User] | List of user object
+
+// Creates list of users with given input array
+UserAPI.createUsersWithArrayInput(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**[User]**](User.md) | List of user object |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **createUsersWithListInput**
+```swift
+ open class func createUsersWithListInput(body: [User], completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Creates list of users with given input array
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let body = [User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123)] // [User] | List of user object
+
+// Creates list of users with given input array
+UserAPI.createUsersWithListInput(body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**[User]**](User.md) | List of user object |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **deleteUser**
+```swift
+ open class func deleteUser(username: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Delete user
+
+This can only be done by the logged in user.
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let username = "username_example" // String | The name that needs to be deleted
+
+// Delete user
+UserAPI.deleteUser(username: username) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **String** | The name that needs to be deleted |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **getUserByName**
+```swift
+ open class func getUserByName(username: String, completion: @escaping (_ data: User?, _ error: Error?) -> Void)
+```
+
+Get user by user name
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let username = "username_example" // String | The name that needs to be fetched. Use user1 for testing.
+
+// Get user by user name
+UserAPI.getUserByName(username: username) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **String** | The name that needs to be fetched. Use user1 for testing. |
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **loginUser**
+```swift
+ open class func loginUser(username: String, password: String, completion: @escaping (_ data: String?, _ error: Error?) -> Void)
+```
+
+Logs user into the system
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let username = "username_example" // String | The user name for login
+let password = "password_example" // String | The password for login in clear text
+
+// Logs user into the system
+UserAPI.loginUser(username: username, password: password) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **String** | The user name for login |
+ **password** | **String** | The password for login in clear text |
+
+### Return type
+
+**String**
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/xml, application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **logoutUser**
+```swift
+ open class func logoutUser(completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Logs out current logged in user session
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+
+// Logs out current logged in user session
+UserAPI.logoutUser() { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+# **updateUser**
+```swift
+ open class func updateUser(username: String, body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void)
+```
+
+Updated user
+
+This can only be done by the logged in user.
+
+### Example
+```swift
+// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new
+import PetstoreClient
+
+let username = "username_example" // String | name that need to be deleted
+let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User | Updated user object
+
+// Updated user
+UserAPI.updateUser(username: username, body: body) { (response, error) in
+ guard error == nil else {
+ print(error)
+ return
+ }
+
+ if (response) {
+ dump(response)
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **username** | **String** | name that need to be deleted |
+ **body** | [**User**](User.md) | Updated user object |
+
+### Return type
+
+Void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: Not defined
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/git_push.sh b/samples/client/petstore/swift5/readonlyProperties/git_push.sh
new file mode 100644
index 00000000000..ced3be2b0c7
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/git_push.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+ git_host="github.com"
+ echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=`git remote`
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
+
diff --git a/samples/client/petstore/swift5/readonlyProperties/project.yml b/samples/client/petstore/swift5/readonlyProperties/project.yml
new file mode 100644
index 00000000000..892005fdd5a
--- /dev/null
+++ b/samples/client/petstore/swift5/readonlyProperties/project.yml
@@ -0,0 +1,14 @@
+name: PetstoreClient
+targets:
+ PetstoreClient:
+ type: framework
+ platform: iOS
+ deploymentTarget: "10.0"
+ sources: [PetstoreClient]
+ info:
+ path: ./Info.plist
+ version: 1.0.0
+ settings:
+ APPLICATION_EXTENSION_API_ONLY: true
+ scheme: {}
+