diff --git a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache index 71e9670965bf..b7aac0d8ef16 100644 --- a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache @@ -190,16 +190,18 @@ private var managerStore = SynchronizedDictionary() } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.{{projectName}}.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ private var urlSessionStore = SynchronizedDictionary() completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ private var urlSessionStore = SynchronizedDictionary() completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.{{projectName}}.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift index f26fae21f710..8b73fa8aaf63 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift @@ -190,16 +190,18 @@ open class AlamofireRequestBuilder: RequestBuilder { let fileManager = FileManager.default let urlRequest = try request.asURLRequest() - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try self.getURL(from: urlRequest) var requestPath = try self.getPath(from: requestURL) if let headerFileName = self.getFileName(fromContentDisposition: dataResponse.response?.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -225,6 +227,18 @@ open class AlamofireRequestBuilder: RequestBuilder { completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error))) } + }) + case is Data.Type: + validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in + cleanupRequest() + + switch dataResponse.result { + case .success: + completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) + case let .failure(error): + completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error))) + } + }) default: validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in @@ -328,6 +342,52 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild } }) + case is URL.Type: + validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in + cleanupRequest() + + do { + + guard !dataResponse.result.isFailure else { + throw DownloadException.responseFailed + } + + guard let data = dataResponse.data else { + throw DownloadException.responseDataMissing + } + + guard let request = request.request else { + throw DownloadException.requestMissing + } + + let fileManager = FileManager.default + let urlRequest = try request.asURLRequest() + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try self.getURL(from: urlRequest) + + var requestPath = try self.getPath(from: requestURL) + + if let headerFileName = self.getFileName(fromContentDisposition: dataResponse.response?.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: dataResponse.response!, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, error))) + } + return + }) case is Void.Type: validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { voidResponse in cleanupRequest() diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index c8ac98f20266..66b9d23bb399 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ internal class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ internal class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ internal class URLSessionDecodableRequestBuilder: URLSessionReques completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil)))