diff --git a/Podfile.lock b/Podfile.lock index a71c985..5e97630 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -13,4 +13,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 9cb5cf14b95b566960199e173b82560ca9dcf6e6 -COCOAPODS: 1.11.3 +COCOAPODS: 1.11.2 diff --git a/RevoHttp.podspec b/RevoHttp.podspec index b58ca04..626da5c 100644 --- a/RevoHttp.podspec +++ b/RevoHttp.podspec @@ -3,7 +3,7 @@ Pod::Spec.new do |spec| spec.name = "RevoHttp" - spec.version = "0.3.2" + spec.version = "0.3.3" spec.summary = "Foundation http." spec.description = "A wrapper arround native Http requests for simpler and cleaner code" @@ -39,7 +39,7 @@ Pod::Spec.new do |spec| # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # - spec.source = { :git => "https://github.com/revosystems/revohttp.git", :tag => "0.3.2" } + spec.source = { :git => "https://github.com/revosystems/revohttp.git", :tag => "0.3.3" } # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # diff --git a/RevoHttp/src/Http.swift b/RevoHttp/src/Http.swift index 4e8a8db..cc6114d 100644 --- a/RevoHttp/src/Http.swift +++ b/RevoHttp/src/Http.swift @@ -48,16 +48,16 @@ public class Http : NSObject { //MARK: Async call public func call(_ method:HttpRequest.Method, _ url:String, params:[String:Codable] = [:], headers:[String:String] = [:]) async throws -> T { - return try await withCheckedThrowingContinuation { continuation in + try await withCheckedThrowingContinuation { continuation in let request = HttpRequest(method: method, url: url, params:params, headers: headers) call(request) { response in print(response.toString) guard response.error == nil else { - return continuation.resume(throwing: HttpError.responseError) + return continuation.resume(throwing: HttpError.responseError()) } guard response.statusCode >= 200 && response.statusCode < 300 else { - return continuation.resume(throwing: HttpError.reponseStatusError(response: response)) + return continuation.resume(throwing: HttpError.responseStatusError(response: response)) } guard let result:T = response.decoded() else { return continuation.resume(throwing: HttpError.undecodableResponse) @@ -66,7 +66,28 @@ public class Http : NSObject { } } } - + + public func call(_ method:HttpRequest.Method, _ url:String, body:String, headers:[String:String] = [:]) async throws -> T { + try await withCheckedThrowingContinuation { continuation in + let request = HttpRequest(method: method, url: url, headers: headers) + request.body = body + + call(request) { response in + print(response.toString) + guard response.error == nil else { + return continuation.resume(throwing: HttpError.responseError()) + } + guard response.statusCode >= 200 && response.statusCode < 300 else { + return continuation.resume(throwing: HttpError.responseStatusError(response: response)) + } + guard let result:T = response.decoded() else { + return continuation.resume(throwing: HttpError.undecodableResponse) + } + return continuation.resume(returning:result) + } + } + } + public func call(_ method:HttpRequest.Method, url:String, params:[String:Codable] = [:], headers:[String:String] = [:], then:@escaping(_ response:T?, _ error:Error?) -> Void) { let request = HttpRequest(method: method, url: url, params: params, headers: headers) call(request) { response in @@ -74,7 +95,7 @@ public class Http : NSObject { then(result, response.error) } } - + public func get(_ url:String, params:[String:Codable] = [:], headers:[String:String] = [:], then:@escaping(_ response:HttpResponse) -> Void) { let request = HttpRequest(method: .get, url: url, params: params, headers: headers) call(request, then:then) diff --git a/RevoHttp/src/HttpError.swift b/RevoHttp/src/HttpError.swift index 723e647..0022857 100644 --- a/RevoHttp/src/HttpError.swift +++ b/RevoHttp/src/HttpError.swift @@ -1,11 +1,11 @@ import Foundation -enum HttpError : Error { +public enum HttpError : Error { case invalidUrl case invalidParams - case responseError - case reponseStatusError(response:HttpResponse) + case responseError(errorMessage:String? = nil) + case responseStatusError(response:HttpResponse) case undecodableResponse var localizedDescription: String { @@ -13,7 +13,7 @@ enum HttpError : Error { case .invalidUrl: return "Malformed Url" case .invalidParams: return "Invalid input params" case .responseError: return "Response returned and error" - case .reponseStatusError: return "Response returned a non 200 status" + case .responseStatusError: return "Response returned a non 200 status" case .undecodableResponse: return "Undecodable response" }