diff --git a/bin/swift4-petstore-all.sh b/bin/swift4-petstore-all.sh
index 167a7a684816..3dc1ee61191e 100755
--- a/bin/swift4-petstore-all.sh
+++ b/bin/swift4-petstore-all.sh
@@ -7,3 +7,4 @@
./bin/swift4-petstore-objcCompatible.sh
./bin/swift4-petstore-unwrapRequired.sh
./bin/swift4-petstore-nonPublicApi.sh
+./bin/swift4-petstore-urlsession.sh
diff --git a/bin/swift4-petstore-urlsession.json b/bin/swift4-petstore-urlsession.json
new file mode 100644
index 000000000000..db0f6c9fbfb3
--- /dev/null
+++ b/bin/swift4-petstore-urlsession.json
@@ -0,0 +1,7 @@
+{
+ "podSummary": "PetstoreClient",
+ "podHomepage": "https://github.com/openapitools/openapi-generator",
+ "podAuthors": "",
+ "projectName": "PetstoreClient",
+ "library": "urlsession"
+}
diff --git a/bin/swift4-petstore-urlsession.sh b/bin/swift4-petstore-urlsession.sh
new file mode 100755
index 000000000000..0fb715dd38af
--- /dev/null
+++ b/bin/swift4-petstore-urlsession.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/swift4 -i modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml -g swift4 -c ./bin/swift4-petstore-urlsession.json -o samples/client/petstore/swift4/urlSessionLibrary --generate-alias-as-model $@"
+
+java $JAVA_OPTS -jar $executable $ags
+
+if type "xcodegen" > /dev/null 2>&1; then
+ cd samples/client/petstore/swift4/urlsessionLibrary
+ xcodegen generate
+fi
+
+if type "swiftlint" > /dev/null 2>&1; then
+ cd samples/client/petstore/swift4/urlsessionLibrary
+ swiftlint autocorrect
+fi
\ No newline at end of file
diff --git a/docs/generators/swift4.md b/docs/generators/swift4.md
index 5abbc3658cf9..47ff9756b959 100644
--- a/docs/generators/swift4.md
+++ b/docs/generators/swift4.md
@@ -28,3 +28,4 @@ sidebar_label: swift4
|swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null|
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
|lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false|
+|library|Library template (sub-template) to use|
- **alamofire**
- [DEFAULT] HTTP client: Alamofire
- **urlsession**
- HTTP client: URLSession
|alamofire|
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift4Codegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift4Codegen.java
index 03d7ed690bfb..088c9672abf0 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift4Codegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift4Codegen.java
@@ -55,6 +55,8 @@ public class Swift4Codegen extends DefaultCodegen implements CodegenConfig {
public static final String SWIFT_USE_API_NAMESPACE = "swiftUseApiNamespace";
public static final String DEFAULT_POD_AUTHORS = "OpenAPI Generator";
public static final String LENIENT_TYPE_CAST = "lenientTypeCast";
+ protected static final String ALAMOFIRE = "alamofire";
+ protected static final String URLSESSION = "urlsession";
protected static final String LIBRARY_PROMISE_KIT = "PromiseKit";
protected static final String LIBRARY_RX_SWIFT = "RxSwift";
protected static final String LIBRARY_RESULT = "Result";
@@ -242,6 +244,16 @@ public Swift4Codegen() {
"Accept and cast values for simple types (string->bool, "
+ "string->int, int->string)")
.defaultValue(Boolean.FALSE.toString()));
+
+ supportedLibraries.put(ALAMOFIRE, "[DEFAULT] HTTP client: Alamofire");
+ supportedLibraries.put(URLSESSION, "HTTP client: URLSession");
+
+ CliOption libraryOption = new CliOption(CodegenConstants.LIBRARY, "Library template (sub-template) to use");
+ libraryOption.setEnum(supportedLibraries);
+ libraryOption.setDefault(ALAMOFIRE);
+ cliOptions.add(libraryOption);
+ setLibrary(ALAMOFIRE);
+
}
private static CodegenModel reconcileProperties(CodegenModel codegenModel,
@@ -409,9 +421,6 @@ public void processOpts() {
supportingFiles.add(new SupportingFile("APIHelper.mustache",
sourceFolder,
"APIHelper.swift"));
- supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache",
- sourceFolder,
- "AlamofireImplementations.swift"));
supportingFiles.add(new SupportingFile("Configuration.mustache",
sourceFolder,
"Configuration.swift"));
@@ -433,6 +442,9 @@ public void processOpts() {
supportingFiles.add(new SupportingFile("JSONEncodingHelper.mustache",
sourceFolder,
"JSONEncodingHelper.swift"));
+ supportingFiles.add(new SupportingFile("SynchronizedDictionary.mustache",
+ sourceFolder,
+ "SynchronizedDictionary.swift"));
if (ArrayUtils.contains(responseAs, LIBRARY_RESULT)) {
supportingFiles.add(new SupportingFile("Result.mustache",
sourceFolder,
@@ -451,6 +463,22 @@ public void processOpts() {
"",
"project.yml"));
+ switch (getLibrary()) {
+ case ALAMOFIRE:
+ additionalProperties.put("useAlamofire", true);
+ supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache",
+ sourceFolder,
+ "AlamofireImplementations.swift"));
+ break;
+ case URLSESSION:
+ additionalProperties.put("useURLSession", true);
+ supportingFiles.add(new SupportingFile("URLSessionImplementations.mustache",
+ sourceFolder,
+ "URLSessionImplementations.swift"));
+ break;
+ default:
+ break;
+ }
}
@Override
diff --git a/modules/openapi-generator/src/main/resources/swift4/APIs.mustache b/modules/openapi-generator/src/main/resources/swift4/APIs.mustache
index 0c3f78b057c4..fee058ae3b8d 100644
--- a/modules/openapi-generator/src/main/resources/swift4/APIs.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/APIs.mustache
@@ -9,8 +9,9 @@ import Foundation
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class {{projectName}}API {
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var basePath = "{{{basePath}}}"
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var credential: URLCredential?
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var customHeaders: [String:String] = [:]
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory()
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var customHeaders: [String:String] = [:]{{#useAlamofire}}
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory(){{/useAlamofire}}{{#useURLSession}}
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory(){{/useURLSession}}
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var apiResponseQueue: DispatchQueue = .main
}
diff --git a/modules/openapi-generator/src/main/resources/swift4/Cartfile.mustache b/modules/openapi-generator/src/main/resources/swift4/Cartfile.mustache
index 230311260231..fd2bf398ac54 100644
--- a/modules/openapi-generator/src/main/resources/swift4/Cartfile.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/Cartfile.mustache
@@ -1,3 +1,3 @@
-github "Alamofire/Alamofire" ~> 4.9.0{{#usePromiseKit}}
+{{#useAlamofire}}github "Alamofire/Alamofire" ~> 4.9.0{{/useAlamofire}}{{#usePromiseKit}}
github "mxcl/PromiseKit" ~> 6.11.0{{/usePromiseKit}}{{#useRxSwift}}
github "ReactiveX/RxSwift" ~> 4.5.0{{/useRxSwift}}
diff --git a/modules/openapi-generator/src/main/resources/swift4/JSONEncodableEncoding.mustache b/modules/openapi-generator/src/main/resources/swift4/JSONEncodableEncoding.mustache
index 69636d84635c..71cdb1da93c5 100644
--- a/modules/openapi-generator/src/main/resources/swift4/JSONEncodableEncoding.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/JSONEncodableEncoding.mustache
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} struct JSONDataEncoding: ParameterEncoding {
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ import Alamofire
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} 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
@@ -41,10 +40,10 @@ import Alamofire
return urlRequest
}
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters? = nil
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]? = nil
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/modules/openapi-generator/src/main/resources/swift4/JSONEncodingHelper.mustache b/modules/openapi-generator/src/main/resources/swift4/JSONEncodingHelper.mustache
index d4d7cc8f7500..d7a6c37e19de 100644
--- a/modules/openapi-generator/src/main/resources/swift4/JSONEncodingHelper.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/JSONEncodingHelper.mustache
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class JSONEncodingHelper {
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters? = nil
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]? = nil
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ import Alamofire
return params
}
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters? = nil
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]? = nil
if let encodableObj = encodableObj {
do {
diff --git a/modules/openapi-generator/src/main/resources/swift4/Models.mustache b/modules/openapi-generator/src/main/resources/swift4/Models.mustache
index 62b20a27c325..cf561f12e95c 100644
--- a/modules/openapi-generator/src/main/resources/swift4/Models.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/Models.mustache
@@ -14,6 +14,22 @@ protocol JSONEncodable {
case error(Int, Data?, Error)
}
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum DownloadException : Error {
+ case responseDataMissing
+ case responseFailed
+ case requestMissing
+ case requestMissingPath
+ case requestMissingURL
+}
+
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum DecodableRequestBuilderError: Error {
+ case emptyDataResponse
+ case nilHTTPResponse
+ case jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class Response {
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} let statusCode: Int
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} let header: [String: String]
diff --git a/modules/openapi-generator/src/main/resources/swift4/Package.swift.mustache b/modules/openapi-generator/src/main/resources/swift4/Package.swift.mustache
index 3ca1dfcbfa2d..aa39eab71f4f 100644
--- a/modules/openapi-generator/src/main/resources/swift4/Package.swift.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/Package.swift.mustache
@@ -13,7 +13,9 @@ let package = Package(
],
dependencies: [
// Dependencies declare other packages that this package depends on.
+ {{#useAlamofire}}
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9.0"),
+ {{/useAlamofire}}
{{#usePromiseKit}}
.package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.11.0"),
{{/usePromiseKit}}
@@ -26,7 +28,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "{{projectName}}",
- dependencies: ["Alamofire"{{#usePromiseKit}}, "PromiseKit"{{/usePromiseKit}}{{#useRxSwift}}, "RxSwift"{{/useRxSwift}}],
+ dependencies: [{{#useAlamofire}}"Alamofire", {{/useAlamofire}}{{#usePromiseKit}}"PromiseKit", {{/usePromiseKit}}{{#useRxSwift}}"RxSwift"{{/useRxSwift}}],
path: "{{projectName}}/Classes"
),
]
diff --git a/modules/openapi-generator/src/main/resources/swift4/Podspec.mustache b/modules/openapi-generator/src/main/resources/swift4/Podspec.mustache
index e7377c7a22f3..a394da4019b3 100644
--- a/modules/openapi-generator/src/main/resources/swift4/Podspec.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/Podspec.mustache
@@ -34,5 +34,7 @@ Pod::Spec.new do |s|
{{#useRxSwift}}
s.dependency 'RxSwift', '~> 4.5.0'
{{/useRxSwift}}
+ {{#useAlamofire}}
s.dependency 'Alamofire', '~> 4.9.0'
+ {{/useAlamofire}}
end
diff --git a/modules/openapi-generator/src/main/resources/swift4/SynchronizedDictionary.mustache b/modules/openapi-generator/src/main/resources/swift4/SynchronizedDictionary.mustache
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/swift4/SynchronizedDictionary.mustache
@@ -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/modules/openapi-generator/src/main/resources/swift4/XcodeGen.mustache b/modules/openapi-generator/src/main/resources/swift4/XcodeGen.mustache
index 9e447e49a644..3b57c69e1048 100644
--- a/modules/openapi-generator/src/main/resources/swift4/XcodeGen.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/XcodeGen.mustache
@@ -11,7 +11,7 @@ targets:
settings:
APPLICATION_EXTENSION_API_ONLY: true
scheme: {}
- dependencies:
- - carthage: Alamofire{{#useRxSwift}}
+ {{#useAlamofire}}dependencies:{{/useAlamofire}}{{^useAlamofire}}{{#useRxSwift}}dependencies:{{/useRxSwift}}{{/useAlamofire}}{{^useAlamofire}}{{^useRxSwift}}{{#usePromiseKit}}dependencies:{{/usePromiseKit}}{{/useRxSwift}}{{/useAlamofire}}{{#useAlamofire}}
+ - carthage: Alamofire{{/useAlamofire}}{{#useRxSwift}}
- carthage: RxSwift{{/useRxSwift}}{{#usePromiseKit}}
- carthage: PromiseKit{{/usePromiseKit}}
diff --git a/modules/openapi-generator/src/main/resources/swift4/AlamofireImplementations.mustache b/modules/openapi-generator/src/main/resources/swift4/libraries/alamofire/AlamofireImplementations.mustache
similarity index 92%
rename from modules/openapi-generator/src/main/resources/swift4/AlamofireImplementations.mustache
rename to modules/openapi-generator/src/main/resources/swift4/libraries/alamofire/AlamofireImplementations.mustache
index d0750a5fd000..32bb8de41183 100644
--- a/modules/openapi-generator/src/main/resources/swift4/AlamofireImplementations.mustache
+++ b/modules/openapi-generator/src/main/resources/swift4/libraries/alamofire/AlamofireImplementations.mustache
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -329,21 +300,6 @@ private var managerStore = SynchronizedDictionary: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -427,12 +383,12 @@ fileprivate enum DownloadException : Error {
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -449,3 +405,23 @@ fileprivate enum DownloadException : Error {
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/modules/openapi-generator/src/main/resources/swift4/libraries/urlsession/URLSessionImplementations.mustache b/modules/openapi-generator/src/main/resources/swift4/libraries/urlsession/URLSessionImplementations.mustache
new file mode 100644
index 000000000000..74cdb2d7f3ad
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/swift4/libraries/urlsession/URLSessionImplementations.mustache
@@ -0,0 +1,598 @@
+// 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()
+
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class URLSessionRequestBuilder: RequestBuilder {
+
+ let progress = Progress()
+
+ private var observation: NSKeyValueObservation?
+
+ deinit {
+ observation?.invalidate()
+ }
+
+ fileprivate let sessionDelegate = SessionDelegate()
+
+ /**
+ May be assigned if you want to control the authentication challenges.
+ */
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} 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.
+ */
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)?
+
+ required {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} 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.
+ */
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} 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.
+ */
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} 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).
+ */
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} 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 {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ completion: @escaping (_ response: Response?, _ error: 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 NSURL }
+ .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 {
+ self.execute(completion)
+ } else {
+
+ self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
+ }
+ }
+ } else {
+ 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 {
+ cleanupRequest()
+ completion(nil, ErrorResponse.error(415, nil, error))
+ }
+
+ }
+
+ fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
+
+ guard let httpResponse = response as? HTTPURLResponse else {
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
+ return
+ }
+
+ switch T.self {
+ case is String.Type:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: body as? T
+ ),
+ nil
+ )
+
+ 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(
+ Response(
+ response: httpResponse,
+ body: (filePath as? T)
+ ),
+ nil
+ )
+
+ } catch let requestParserError as DownloadException {
+ completion(nil, ErrorResponse.error(400, data, requestParserError))
+ } catch let error {
+ completion(nil, ErrorResponse.error(400, data, error))
+ }
+
+ case is Void.Type:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: nil
+ ),
+ nil
+ )
+
+ default:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: data as? T
+ ),
+ nil
+ )
+ }
+ }
+
+ {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func buildHeaders() -> [String: String] {
+ var httpHeaders = {{projectName}}API.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? = nil
+
+ 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
+ }
+
+}
+
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder {
+ override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
+
+ guard let httpResponse = response as? HTTPURLResponse else {
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
+ return
+ }
+
+ switch T.self {
+ case is String.Type:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? ""
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: body as? T
+ ),
+ nil
+ )
+
+ case is Void.Type:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: nil
+ ),
+ nil
+ )
+
+ case is Data.Type:
+
+ if let error = error {
+ completion(
+ nil,
+ ErrorResponse.error(httpResponse.statusCode, data, error)
+ )
+ return
+ }
+
+ completion(
+ Response(
+ response: httpResponse,
+ body: data as? T
+ ),
+ nil
+ )
+
+ default:
+
+ if let error = error {
+ completion(nil, ErrorResponse.error(httpResponse.statusCode, data, error))
+ return
+ }
+
+ guard let data = data, !data.isEmpty else {
+ completion(nil, ErrorResponse.error(httpResponse.statusCode, nil, DecodableRequestBuilderError.emptyDataResponse))
+ return
+ }
+
+ var responseObj: Response? = nil
+
+ let decodeResult: (decodableObj: T?, error: Error?) = CodableHelper.decode(T.self, from: data)
+ if decodeResult.error == nil {
+ responseObj = Response(response: httpResponse, body: decodeResult.decodableObj)
+ }
+
+ completion(responseObj, decodeResult.error)
+
+ }
+ }
+}
+
+fileprivate class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate {
+
+ var credential: URLCredential?
+
+ var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))?
+
+ public 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)
+ }
+}
+
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} 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"
+}
+
+{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} protocol ParameterEncoding {
+ func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest
+}
+
+fileprivate 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
+ }
+}
+
+fileprivate 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
+
+ for (k, v) in parameters ?? [:] {
+ switch v {
+ case let fileURL as URL:
+
+ let fileData = try Data(contentsOf: fileURL)
+
+ let mimetype = self.contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL)
+
+ urlRequest = configureFileUploadRequest(urlRequest: urlRequest, name: fileURL.lastPathComponent, data: fileData, mimeType: mimetype)
+
+ case let string as String:
+
+ if let data = string.data(using: .utf8) {
+ urlRequest = configureFileUploadRequest(urlRequest: urlRequest, name: k, data: data, mimeType: nil)
+ }
+
+ case let number as NSNumber:
+
+ if let data = number.stringValue.data(using: .utf8) {
+ urlRequest = configureFileUploadRequest(urlRequest: urlRequest, name: k, data: data, mimeType: nil)
+ }
+
+ default:
+ fatalError("Unprocessable value \(v) with key \(k)")
+ }
+ }
+
+ return urlRequest
+ }
+
+ private func configureFileUploadRequest(urlRequest: URLRequest, name: String, data: Data, mimeType: String?) -> URLRequest {
+
+ var urlRequest = urlRequest
+
+ var body = urlRequest.httpBody ?? Data()
+
+ // https://stackoverflow.com/a/26163136/976628
+ let boundary = "Boundary-\(UUID().uuidString)"
+ urlRequest.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+ body.append("--\(boundary)\r\n")
+ body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(name)\"\r\n")
+
+ if let mimeType = mimeType {
+ body.append("Content-Type: \(mimeType)\r\n\r\n")
+ }
+
+ body.append(data)
+
+ body.append("\r\n")
+
+ body.append("--\(boundary)--\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 NSMutableData
+ ///
+ /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to NSData, and then add that data to the NSMutableData, this wraps it in a nice convenient little extension to NSMutableData. This converts using UTF-8.
+ ///
+ /// - parameter string: The string to be added to the `NSMutableData`.
+
+ mutating func append(_ string: String) {
+ if let data = string.data(using: .utf8) {
+ append(data)
+ }
+ }
+}
+
+extension JSONDataEncoding: ParameterEncoding {}
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift4OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift4OptionsProvider.java
index 29692ce08e31..a5990b27569d 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift4OptionsProvider.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift4OptionsProvider.java
@@ -47,6 +47,7 @@ public class Swift4OptionsProvider implements OptionsProvider {
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";
+ public static final String LIBRARY_VALUE = "alamofire";
@Override
public String getLanguage() {
@@ -79,6 +80,7 @@ public Map createOptions() {
.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true")
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.PREPEND_FORM_OR_BODY_PARAMETERS, PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)
+ .put(CodegenConstants.LIBRARY, LIBRARY_VALUE)
.build();
}
diff --git a/samples/client/petstore/swift4/default/.openapi-generator/VERSION b/samples/client/petstore/swift4/default/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/default/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/default/Package.swift b/samples/client/petstore/swift4/default/Package.swift
index e5c5f0f33b82..f8fb4d036255 100644
--- a/samples/client/petstore/swift4/default/Package.swift
+++ b/samples/client/petstore/swift4/default/Package.swift
@@ -20,7 +20,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire"],
+ dependencies: ["Alamofire" ],
path: "PetstoreClient/Classes"
)
]
diff --git a/samples/client/petstore/swift4/default/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/default/PetstoreClient.xcodeproj/project.pbxproj
index b606fe1ab100..7bbaa0875bcf 100644
--- a/samples/client/petstore/swift4/default/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/default/PetstoreClient.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
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 */; };
@@ -117,6 +118,7 @@
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 = ""; };
@@ -213,6 +215,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -372,6 +375,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 1d54e695608b..bdeacba47609 100644
--- a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/default/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/default/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/swift4/nonPublicApi/.openapi-generator/VERSION b/samples/client/petstore/swift4/nonPublicApi/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/nonPublicApi/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/nonPublicApi/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/nonPublicApi/Package.swift b/samples/client/petstore/swift4/nonPublicApi/Package.swift
index e5c5f0f33b82..f8fb4d036255 100644
--- a/samples/client/petstore/swift4/nonPublicApi/Package.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/Package.swift
@@ -20,7 +20,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire"],
+ dependencies: ["Alamofire" ],
path: "PetstoreClient/Classes"
)
]
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient.xcodeproj/project.pbxproj
index b606fe1ab100..7bbaa0875bcf 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
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 */; };
@@ -117,6 +118,7 @@
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 = ""; };
@@ -213,6 +215,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -372,6 +375,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift
index 82b62e32eb97..4e09f94504fc 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift
@@ -11,6 +11,7 @@ internal class PetstoreClientAPI {
internal static var credential: URLCredential?
internal static var customHeaders: [String: String] = [:]
internal static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory()
+ internal static var apiResponseQueue: DispatchQueue = .main
}
internal class RequestBuilder {
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
index c793f330e416..978e31b2f4d7 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
@@ -186,7 +186,7 @@ internal class FakeAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "query": query
+ "query": query.encodeToJSON()
])
let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
@@ -284,17 +284,17 @@ internal class FakeAPI {
"integer": integer?.encodeToJSON(),
"int32": int32?.encodeToJSON(),
"int64": int64?.encodeToJSON(),
- "number": number,
- "float": float,
- "double": double,
- "string": string,
- "pattern_without_delimiter": patternWithoutDelimiter,
- "byte": byte,
- "binary": binary,
+ "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,
- "callback": callback
+ "password": password?.encodeToJSON(),
+ "callback": callback?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -415,8 +415,8 @@ internal class FakeAPI {
let path = "/fake"
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "enum_form_string_array": enumFormStringArray,
- "enum_form_string": enumFormString?.rawValue
+ "enum_form_string_array": enumFormStringArray?.encodeToJSON(),
+ "enum_form_string": enumFormString?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -424,14 +424,14 @@ internal class FakeAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "enum_query_string_array": enumQueryStringArray,
- "enum_query_string": enumQueryString?.rawValue,
- "enum_query_integer": enumQueryInteger?.rawValue,
- "enum_query_double": enumQueryDouble?.rawValue
+ "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,
- "enum_header_string": enumHeaderString?.rawValue
+ "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(),
+ "enum_header_string": enumHeaderString?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -486,8 +486,8 @@ internal class FakeAPI {
"int64_group": int64Group?.encodeToJSON()
])
let nillableHeaders: [String: Any?] = [
- "required_boolean_group": requiredBooleanGroup,
- "boolean_group": booleanGroup
+ "required_boolean_group": requiredBooleanGroup.encodeToJSON(),
+ "boolean_group": booleanGroup?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -558,8 +558,8 @@ internal class FakeAPI {
let path = "/fake/jsonFormData"
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "param": param,
- "param2": param2
+ "param": param.encodeToJSON(),
+ "param2": param2.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
index 2e03efdebe7c..f313e142c41e 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
@@ -82,7 +82,7 @@ internal class PetAPI {
let url = URLComponents(string: URLString)
let nillableHeaders: [String: Any?] = [
- "api_key": apiKey
+ "api_key": apiKey?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -129,7 +129,7 @@ internal class PetAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "status": status
+ "status": status.encodeToJSON()
])
let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
@@ -166,7 +166,7 @@ internal class PetAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "tags": tags
+ "tags": tags.encodeToJSON()
])
let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
@@ -284,8 +284,8 @@ internal class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "name": name,
- "status": status
+ "name": name?.encodeToJSON(),
+ "status": status?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -330,8 +330,8 @@ internal class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "additionalMetadata": additionalMetadata,
- "file": file
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "file": file?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -376,8 +376,8 @@ internal class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "additionalMetadata": additionalMetadata,
- "requiredFile": requiredFile
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "requiredFile": requiredFile.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
index 76067cbd42a0..76d77e2cf338 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
@@ -210,8 +210,8 @@ internal class UserAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "username": username,
- "password": password
+ "username": username.encodeToJSON(),
+ "password": password.encodeToJSON()
])
let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index d1188c35a713..171e56f88b18 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -156,7 +127,7 @@ internal class AlamofireRequestBuilder: RequestBuilder {
switch T.self {
case is String.Type:
- validatedRequest.responseString(completionHandler: { (stringResponse) in
+ validatedRequest.responseString(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (stringResponse) in
cleanupRequest()
if stringResponse.result.isFailure {
@@ -176,7 +147,7 @@ internal class AlamofireRequestBuilder: RequestBuilder {
)
})
case is URL.Type:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
do {
@@ -226,7 +197,7 @@ internal class AlamofireRequestBuilder: RequestBuilder {
return
})
case is Void.Type:
- validatedRequest.responseData(completionHandler: { (voidResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (voidResponse) in
cleanupRequest()
if voidResponse.result.isFailure {
@@ -245,7 +216,7 @@ internal class AlamofireRequestBuilder: RequestBuilder {
)
})
default:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
if dataResponse.result.isFailure {
@@ -328,21 +299,6 @@ internal class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-internal enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
internal class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -358,7 +314,7 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
switch T.self {
case is String.Type:
- validatedRequest.responseString(completionHandler: { (stringResponse) in
+ validatedRequest.responseString(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (stringResponse) in
cleanupRequest()
if stringResponse.result.isFailure {
@@ -378,7 +334,7 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
)
})
case is Void.Type:
- validatedRequest.responseData(completionHandler: { (voidResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (voidResponse) in
cleanupRequest()
if voidResponse.result.isFailure {
@@ -397,7 +353,7 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
)
})
case is Data.Type:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
if dataResponse.result.isFailure {
@@ -417,7 +373,7 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
)
})
default:
- validatedRequest.responseData(completionHandler: { (dataResponse: DataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse: DataResponse) in
cleanupRequest()
guard dataResponse.result.isSuccess else {
@@ -426,12 +382,12 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ internal class AlamofireDecodableRequestBuilder: AlamofireRequestB
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift
index 84a3afa480d8..37adeaa872aa 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift
@@ -34,6 +34,10 @@ 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()
@@ -83,6 +87,12 @@ extension Date: JSONEncodable {
}
}
+extension URL: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self
+ }
+}
+
extension UUID: JSONEncodable {
func encodeToJSON() -> Any {
return self.uuidString
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index bd9f3a2ed0d5..6b69f3b1bd50 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-internal struct JSONDataEncoding: ParameterEncoding {
+internal struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ internal struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- internal func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ internal 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
@@ -41,10 +40,10 @@ internal struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- internal static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ internal static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 9330c4572543..fe216057cba9 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
internal class JSONEncodingHelper {
- internal class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ internal class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ internal class JSONEncodingHelper {
return params
}
- internal class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ internal class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models.swift
index 5c253abc2c40..b5f1df522b56 100644
--- a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ internal enum ErrorResponse: Error {
case error(Int, Data?, Error)
}
+internal enum DownloadException: Error {
+ case responseDataMissing
+ case responseFailed
+ case requestMissing
+ case requestMissingPath
+ case requestMissingURL
+}
+
+internal enum DecodableRequestBuilderError: Error {
+ case emptyDataResponse
+ case nilHTTPResponse
+ case jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
internal class Response {
internal let statusCode: Int
internal let header: [String: String]
diff --git a/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/nonPublicApi/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/nonPublicApi/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/swift4/objcCompatible/.openapi-generator/VERSION b/samples/client/petstore/swift4/objcCompatible/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/objcCompatible/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/objcCompatible/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/objcCompatible/Package.swift b/samples/client/petstore/swift4/objcCompatible/Package.swift
index e5c5f0f33b82..f8fb4d036255 100644
--- a/samples/client/petstore/swift4/objcCompatible/Package.swift
+++ b/samples/client/petstore/swift4/objcCompatible/Package.swift
@@ -20,7 +20,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire"],
+ dependencies: ["Alamofire" ],
path: "PetstoreClient/Classes"
)
]
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/objcCompatible/PetstoreClient.xcodeproj/project.pbxproj
index b606fe1ab100..7bbaa0875bcf 100644
--- a/samples/client/petstore/swift4/objcCompatible/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/objcCompatible/PetstoreClient.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
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 */; };
@@ -117,6 +118,7 @@
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 = ""; };
@@ -213,6 +215,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -372,6 +375,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 1d54e695608b..bdeacba47609 100644
--- a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/objcCompatible/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/objcCompatible/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/swift4/promisekitLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift4/promisekitLibrary/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/promisekitLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/promisekitLibrary/Package.swift b/samples/client/petstore/swift4/promisekitLibrary/Package.swift
index fbf22f5f8236..822f1b78c14e 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/Package.swift
+++ b/samples/client/petstore/swift4/promisekitLibrary/Package.swift
@@ -21,7 +21,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire", "PromiseKit"],
+ dependencies: ["Alamofire", "PromiseKit", ],
path: "PetstoreClient/Classes"
),
]
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient.xcodeproj/project.pbxproj
index c2e04850669d..4ef238e2a908 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient.xcodeproj/project.pbxproj
@@ -51,6 +51,7 @@
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 */; };
@@ -119,6 +120,7 @@
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 = ""; };
@@ -216,6 +218,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -376,6 +379,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 1d54e695608b..bdeacba47609 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/promisekitLibrary/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/swift4/resultLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift4/resultLibrary/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/resultLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/resultLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/resultLibrary/Package.swift b/samples/client/petstore/swift4/resultLibrary/Package.swift
index e5c5f0f33b82..f8fb4d036255 100644
--- a/samples/client/petstore/swift4/resultLibrary/Package.swift
+++ b/samples/client/petstore/swift4/resultLibrary/Package.swift
@@ -20,7 +20,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire"],
+ dependencies: ["Alamofire" ],
path: "PetstoreClient/Classes"
)
]
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/resultLibrary/PetstoreClient.xcodeproj/project.pbxproj
index 49e6ca81fd81..74ac75bb4543 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient.xcodeproj/project.pbxproj
@@ -51,6 +51,7 @@
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 */; };
@@ -119,6 +120,7 @@
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 = ""; };
@@ -216,6 +218,7 @@
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
099A5E845AF5E1409204325B /* Result.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -376,6 +379,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift
index 9e4312f685de..832282d224f8 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift
@@ -11,6 +11,7 @@ open class PetstoreClientAPI {
public static var credential: URLCredential?
public static var customHeaders: [String: String] = [:]
public static var requestBuilderFactory: RequestBuilderFactory = AlamofireRequestBuilderFactory()
+ public static var apiResponseQueue: DispatchQueue = .main
}
open class RequestBuilder {
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
index adfc6341ece7..c5d29842ad87 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift
@@ -279,7 +279,7 @@ open class FakeAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "query": query
+ "query": query.encodeToJSON()
])
let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder()
@@ -422,17 +422,17 @@ open class FakeAPI {
"integer": integer?.encodeToJSON(),
"int32": int32?.encodeToJSON(),
"int64": int64?.encodeToJSON(),
- "number": number,
- "float": float,
- "double": double,
- "string": string,
- "pattern_without_delimiter": patternWithoutDelimiter,
- "byte": byte,
- "binary": binary,
+ "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,
- "callback": callback
+ "password": password?.encodeToJSON(),
+ "callback": callback?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -575,8 +575,8 @@ open class FakeAPI {
let path = "/fake"
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "enum_form_string_array": enumFormStringArray,
- "enum_form_string": enumFormString?.rawValue
+ "enum_form_string_array": enumFormStringArray?.encodeToJSON(),
+ "enum_form_string": enumFormString?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -584,14 +584,14 @@ open class FakeAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "enum_query_string_array": enumQueryStringArray,
- "enum_query_string": enumQueryString?.rawValue,
- "enum_query_integer": enumQueryInteger?.rawValue,
- "enum_query_double": enumQueryDouble?.rawValue
+ "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,
- "enum_header_string": enumHeaderString?.rawValue
+ "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(),
+ "enum_header_string": enumHeaderString?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -666,8 +666,8 @@ open class FakeAPI {
"int64_group": int64Group?.encodeToJSON()
])
let nillableHeaders: [String: Any?] = [
- "required_boolean_group": requiredBooleanGroup,
- "boolean_group": booleanGroup
+ "required_boolean_group": requiredBooleanGroup.encodeToJSON(),
+ "boolean_group": booleanGroup?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -769,8 +769,8 @@ open class FakeAPI {
let path = "/fake/jsonFormData"
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "param": param,
- "param2": param2
+ "param": param.encodeToJSON(),
+ "param2": param2.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
index c8f66b41e872..3c0ac53738ab 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift
@@ -113,7 +113,7 @@ open class PetAPI {
let url = URLComponents(string: URLString)
let nillableHeaders: [String: Any?] = [
- "api_key": apiKey
+ "api_key": apiKey?.encodeToJSON()
]
let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders)
@@ -177,7 +177,7 @@ open class PetAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "status": status
+ "status": status.encodeToJSON()
])
let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
@@ -231,7 +231,7 @@ open class PetAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "tags": tags
+ "tags": tags.encodeToJSON()
])
let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
@@ -398,8 +398,8 @@ open class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "name": name,
- "status": status
+ "name": name?.encodeToJSON(),
+ "status": status?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -463,8 +463,8 @@ open class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "additionalMetadata": additionalMetadata,
- "file": file
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "file": file?.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
@@ -528,8 +528,8 @@ open class PetAPI {
path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil)
let URLString = PetstoreClientAPI.basePath + path
let formParams: [String: Any?] = [
- "additionalMetadata": additionalMetadata,
- "requiredFile": requiredFile
+ "additionalMetadata": additionalMetadata?.encodeToJSON(),
+ "requiredFile": requiredFile.encodeToJSON()
]
let nonNullParameters = APIHelper.rejectNil(formParams)
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
index d0971feb2c1c..c65cdfa1bce3 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift
@@ -305,8 +305,8 @@ open class UserAPI {
var url = URLComponents(string: URLString)
url?.queryItems = APIHelper.mapValuesToQueryItems([
- "username": username,
- "password": password
+ "username": username.encodeToJSON(),
+ "password": password.encodeToJSON()
])
let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder()
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 60ce28c66a27..bdeacba47609 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -156,7 +127,7 @@ open class AlamofireRequestBuilder: RequestBuilder {
switch T.self {
case is String.Type:
- validatedRequest.responseString(completionHandler: { (stringResponse) in
+ validatedRequest.responseString(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (stringResponse) in
cleanupRequest()
if stringResponse.result.isFailure {
@@ -176,7 +147,7 @@ open class AlamofireRequestBuilder: RequestBuilder {
)
})
case is URL.Type:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
do {
@@ -226,7 +197,7 @@ open class AlamofireRequestBuilder: RequestBuilder {
return
})
case is Void.Type:
- validatedRequest.responseData(completionHandler: { (voidResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (voidResponse) in
cleanupRequest()
if voidResponse.result.isFailure {
@@ -245,7 +216,7 @@ open class AlamofireRequestBuilder: RequestBuilder {
)
})
default:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
if dataResponse.result.isFailure {
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -358,7 +314,7 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
switch T.self {
case is String.Type:
- validatedRequest.responseString(completionHandler: { (stringResponse) in
+ validatedRequest.responseString(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (stringResponse) in
cleanupRequest()
if stringResponse.result.isFailure {
@@ -378,7 +334,7 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
)
})
case is Void.Type:
- validatedRequest.responseData(completionHandler: { (voidResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (voidResponse) in
cleanupRequest()
if voidResponse.result.isFailure {
@@ -397,7 +353,7 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
)
})
case is Data.Type:
- validatedRequest.responseData(completionHandler: { (dataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse) in
cleanupRequest()
if dataResponse.result.isFailure {
@@ -417,7 +373,7 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
)
})
default:
- validatedRequest.responseData(completionHandler: { (dataResponse: DataResponse) in
+ validatedRequest.responseData(queue: PetstoreClientAPI.apiResponseQueue, completionHandler: { (dataResponse: DataResponse) in
cleanupRequest()
guard dataResponse.result.isSuccess else {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift
index b223c143e0f0..f8faed255bf0 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift
@@ -34,6 +34,10 @@ 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()
@@ -83,6 +87,12 @@ extension Date: JSONEncodable {
}
}
+extension URL: JSONEncodable {
+ func encodeToJSON() -> Any {
+ return self
+ }
+}
+
extension UUID: JSONEncodable {
func encodeToJSON() -> Any {
return self.uuidString
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/resultLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/resultLibrary/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/swift4/rxswiftLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift4/rxswiftLibrary/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/rxswiftLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient.xcodeproj/project.pbxproj
index 43e65668d5ae..c8e901b4817e 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
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 */; };
@@ -119,6 +120,7 @@
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 = ""; };
@@ -216,6 +218,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -376,6 +379,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 1d54e695608b..bdeacba47609 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/rxswiftLibrary/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/swift4/swift4_test_all.sh b/samples/client/petstore/swift4/swift4_test_all.sh
index 68a2475c71bf..83738edc6179 100755
--- a/samples/client/petstore/swift4/swift4_test_all.sh
+++ b/samples/client/petstore/swift4/swift4_test_all.sh
@@ -8,6 +8,7 @@ DIRECTORY=`dirname $0`
mvn -f $DIRECTORY/default/SwaggerClientTests/pom.xml integration-test
mvn -f $DIRECTORY/promisekitLibrary/SwaggerClientTests/pom.xml integration-test
mvn -f $DIRECTORY/rxswiftLibrary/SwaggerClientTests/pom.xml integration-test
+mvn -f $DIRECTORY/urlsessionLibrary/SwaggerClientTests/pom.xml integration-test
# spm build
mvn -f $DIRECTORY/default/pom.xml integration-test
@@ -17,3 +18,4 @@ mvn -f $DIRECTORY/promisekitLibrary/pom.xml integration-test
mvn -f $DIRECTORY/resultLibrary/pom.xml integration-test
mvn -f $DIRECTORY/rxswiftLibrary/pom.xml integration-test
mvn -f $DIRECTORY/unwrapRequired/pom.xml integration-test
+mvn -f $DIRECTORY/urlsessionLibrary/pom.xml integration-test
diff --git a/samples/client/petstore/swift4/unwrapRequired/.openapi-generator/VERSION b/samples/client/petstore/swift4/unwrapRequired/.openapi-generator/VERSION
index e4955748d3e7..58592f031f65 100644
--- a/samples/client/petstore/swift4/unwrapRequired/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift4/unwrapRequired/.openapi-generator/VERSION
@@ -1 +1 @@
-4.2.2-SNAPSHOT
\ No newline at end of file
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/unwrapRequired/Package.swift b/samples/client/petstore/swift4/unwrapRequired/Package.swift
index e5c5f0f33b82..f8fb4d036255 100644
--- a/samples/client/petstore/swift4/unwrapRequired/Package.swift
+++ b/samples/client/petstore/swift4/unwrapRequired/Package.swift
@@ -20,7 +20,7 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PetstoreClient",
- dependencies: ["Alamofire"],
+ dependencies: ["Alamofire" ],
path: "PetstoreClient/Classes"
)
]
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient.xcodeproj/project.pbxproj
index b606fe1ab100..7bbaa0875bcf 100644
--- a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient.xcodeproj/project.pbxproj
+++ b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient.xcodeproj/project.pbxproj
@@ -50,6 +50,7 @@
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 */; };
@@ -117,6 +118,7 @@
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 = ""; };
@@ -213,6 +215,7 @@
9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */,
35D710108A69DD8A5297F926 /* JSONEncodingHelper.swift */,
8699F7966F748ED026A6FB4C /* Models.swift */,
+ D138F6DA6160301F9281383E /* SynchronizedDictionary.swift */,
F956D0CCAE23BCFD1C7BDD5D /* APIs */,
4FBDCF1330A9AB9122780DB3 /* Models */,
);
@@ -372,6 +375,7 @@
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 */,
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
index 1d54e695608b..bdeacba47609 100644
--- a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
+++ b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift
@@ -17,35 +17,6 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
}
-private 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
- )
-
- public 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
- }
- }
- }
- }
-
// Store manager to retain its reference
private var managerStore = SynchronizedDictionary()
@@ -328,21 +299,6 @@ open class AlamofireRequestBuilder: RequestBuilder {
}
-private enum DownloadException: Error {
- case responseDataMissing
- case responseFailed
- case requestMissing
- case requestMissingPath
- case requestMissingURL
-}
-
-public enum AlamofireDecodableRequestBuilderError: Error {
- case emptyDataResponse
- case nilHTTPResponse
- case jsonDecoding(DecodingError)
- case generalError(Error)
-}
-
open class AlamofireDecodableRequestBuilder: AlamofireRequestBuilder {
override fileprivate func processRequest(request: DataRequest, _ managerId: String, _ completion: @escaping (_ response: Response?, _ error: Error?) -> Void) {
@@ -426,12 +382,12 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
guard let data = dataResponse.data, !data.isEmpty else {
- completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
+ completion(nil, ErrorResponse.error(-1, nil, DecodableRequestBuilderError.emptyDataResponse))
return
}
guard let httpResponse = dataResponse.response else {
- completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
+ completion(nil, ErrorResponse.error(-2, nil, DecodableRequestBuilderError.nilHTTPResponse))
return
}
@@ -448,3 +404,23 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild
}
}
+
+extension JSONDataEncoding: ParameterEncoding {
+
+ // 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: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
+ let urlRequest = try urlRequest.asURLRequest()
+
+ return self.encode(urlRequest, with: parameters)
+ }
+}
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
index fb76bbed26f7..b79e9f5e64d5 100644
--- a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
+++ b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodableEncoding.swift
@@ -6,9 +6,8 @@
//
import Foundation
-import Alamofire
-public struct JSONDataEncoding: ParameterEncoding {
+public struct JSONDataEncoding {
// MARK: Properties
@@ -25,8 +24,8 @@ public struct JSONDataEncoding: ParameterEncoding {
/// - throws: An `Error` if the encoding process encounters an error.
///
/// - returns: The encoded request.
- public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
- var urlRequest = try urlRequest.asURLRequest()
+ 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
@@ -41,10 +40,10 @@ public struct JSONDataEncoding: ParameterEncoding {
return urlRequest
}
- public static func encodingParameters(jsonData: Data?) -> Parameters? {
- var returnedParams: Parameters?
+ public static func encodingParameters(jsonData: Data?) -> [String: Any]? {
+ var returnedParams: [String: Any]?
if let jsonData = jsonData, !jsonData.isEmpty {
- var params = Parameters()
+ var params: [String: Any] = [:]
params[jsonDataKey] = jsonData
returnedParams = params
}
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
index 7bd1267e95f3..13d9241dedd0 100644
--- a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
+++ b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift
@@ -6,12 +6,11 @@
//
import Foundation
-import Alamofire
open class JSONEncodingHelper {
- open class func encodingParameters(forEncodableObject encodableObj: T?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? {
+ var params: [String: Any]?
// Encode the Encodable object
if let encodableObj = encodableObj {
@@ -24,8 +23,8 @@ open class JSONEncodingHelper {
return params
}
- open class func encodingParameters(forEncodableObject encodableObj: Any?) -> Parameters? {
- var params: Parameters?
+ open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? {
+ var params: [String: Any]?
if let encodableObj = encodableObj {
do {
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/Models.swift
index 25161165865e..b9757b6cbc15 100644
--- a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/Models.swift
+++ b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/Models.swift
@@ -14,6 +14,21 @@ 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 jsonDecoding(DecodingError)
+ case generalError(Error)
+}
+
open class Response {
public let statusCode: Int
public let header: [String: String]
diff --git a/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift4/unwrapRequired/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift
new file mode 100644
index 000000000000..acf7ff4031bd
--- /dev/null
+++ b/samples/client/petstore/swift4/unwrapRequired/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/swift4/urlsessionLibrary/.gitignore b/samples/client/petstore/swift4/urlsessionLibrary/.gitignore
new file mode 100644
index 000000000000..5e5d5cebcf47
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/.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/swift4/urlsessionLibrary/.openapi-generator-ignore b/samples/client/petstore/swift4/urlsessionLibrary/.openapi-generator-ignore
new file mode 100644
index 000000000000..7484ee590a38
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/.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/swift4/urlsessionLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift4/urlsessionLibrary/.openapi-generator/VERSION
new file mode 100644
index 000000000000..58592f031f65
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/.openapi-generator/VERSION
@@ -0,0 +1 @@
+4.2.3-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift4/urlsessionLibrary/Cartfile b/samples/client/petstore/swift4/urlsessionLibrary/Cartfile
new file mode 100644
index 000000000000..8b137891791f
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/Cartfile
@@ -0,0 +1 @@
+
diff --git a/samples/client/petstore/swift4/urlsessionLibrary/Info.plist b/samples/client/petstore/swift4/urlsessionLibrary/Info.plist
new file mode 100644
index 000000000000..323e5ecfc420
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/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/swift4/urlsessionLibrary/Package.swift b/samples/client/petstore/swift4/urlsessionLibrary/Package.swift
new file mode 100644
index 000000000000..57c63eeeeaaf
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/Package.swift
@@ -0,0 +1,26 @@
+// swift-tools-version:4.2
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
+import PackageDescription
+
+let package = Package(
+ name: "PetstoreClient",
+ 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/swift4/urlsessionLibrary/PetstoreClient.podspec b/samples/client/petstore/swift4/urlsessionLibrary/PetstoreClient.podspec
new file mode 100644
index 000000000000..983c463d8109
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/PetstoreClient.podspec
@@ -0,0 +1,13 @@
+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.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/swift4/urlsessionLibrary/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift4/urlsessionLibrary/PetstoreClient.xcodeproj/project.pbxproj
new file mode 100644
index 000000000000..9db2b129a2c7
--- /dev/null
+++ b/samples/client/petstore/swift4/urlsessionLibrary/PetstoreClient.xcodeproj/project.pbxproj
@@ -0,0 +1,532 @@
+// !$*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 */; };
+ 22FA6CA58E58550DE36AE750 /* JSONEncodableEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.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 */; };
+ 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 */; };
+ 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 = ""; };
+ 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 = ""; };
+ 9791B840B8D6EAA35343B00F /* JSONEncodableEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONEncodableEncoding.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 = "