diff --git a/PublisherKit.podspec b/PublisherKit.podspec index 34d6afa..dfd8632 100644 --- a/PublisherKit.podspec +++ b/PublisherKit.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |spec| spec.name = "PublisherKit" - spec.version = "4.0.1" + spec.version = "4.0.2" spec.summary = "An open source implementation of Apple's Combine framework for processing asynchronous events over time" spec.homepage = "https://github.com/ragzy15/PublisherKit" diff --git a/README.md b/README.md index 3536aa0..e416da6 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ let package = Package( targets: ["YourPackage"]), ], dependencies: [ - .package(url: "https://github.com/ragzy15/PublisherKit.git", from: "4.0.1"), + .package(url: "https://github.com/ragzy15/PublisherKit.git", from: "4.0.2"), ], targets: [ .target( @@ -80,7 +80,7 @@ source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10.0' use_frameworks! -pod 'PublisherKit', '~> 4.0.1' +pod 'PublisherKit', '~> 4.0.2' ``` Then, run the following command: diff --git a/Sources/PublisherKit/Error/URLError.swift b/Sources/PublisherKit/Error/URLError.swift index e71bec2..7202414 100644 --- a/Sources/PublisherKit/Error/URLError.swift +++ b/Sources/PublisherKit/Error/URLError.swift @@ -20,4 +20,10 @@ extension URLError { NSLocalizedDescriptionKey: "Content data received during a connection request had an unknown content encoding." ]) } + + static func onlyHTTPSupported() -> Error { + URLError(.cannotParseResponse, userInfo: [ + NSLocalizedDescriptionKey: "Currently Validate only works on HTTP requests." + ]) + } } diff --git a/Sources/PublisherKit/Protocols/Publisher/Publisher+Operators.swift b/Sources/PublisherKit/Protocols/Publisher/Publisher+Operators.swift index 616d79f..469a270 100644 --- a/Sources/PublisherKit/Protocols/Publisher/Publisher+Operators.swift +++ b/Sources/PublisherKit/Protocols/Publisher/Publisher+Operators.swift @@ -1260,7 +1260,7 @@ extension Publisher { } // MARK: VALIDATE -extension Publisher where Output == (data: Data, response: HTTPURLResponse) { +extension Publisher where Output == (data: Data, response: URLResponse) { /// Validates that the response has a status code acceptable in the specified range, and that the response has a content type in the specified sequence. /// diff --git a/Sources/PublisherKit/Publishers/URLSession/Data Task.swift b/Sources/PublisherKit/Publishers/URLSession/Data Task.swift index b6d52d9..080d287 100644 --- a/Sources/PublisherKit/Publishers/URLSession/Data Task.swift +++ b/Sources/PublisherKit/Publishers/URLSession/Data Task.swift @@ -39,7 +39,7 @@ extension URLSession { public struct DataTaskPKPublisher: PublisherKit.Publisher { - public typealias Output = (data: Data, response: HTTPURLResponse) + public typealias Output = (data: Data, response: URLResponse) public typealias Failure = Error @@ -104,7 +104,7 @@ extension URLSession.DataTaskPKPublisher { if let error = error { downstream.receive(completion: .failure(error)) - } else if let response = response as? HTTPURLResponse, let data = data { + } else if let response = response, let data = data { _ = downstream.receive((data, response)) downstream.receive(completion: .finished) } else { diff --git a/Sources/PublisherKit/Publishers/URLSession/Download Task.swift b/Sources/PublisherKit/Publishers/URLSession/Download Task.swift index 97a6111..801e044 100644 --- a/Sources/PublisherKit/Publishers/URLSession/Download Task.swift +++ b/Sources/PublisherKit/Publishers/URLSession/Download Task.swift @@ -49,7 +49,7 @@ extension URLSession { public struct DownloadTaskPKPublisher: PublisherKit.Publisher { - public typealias Output = (url: URL, response: HTTPURLResponse) + public typealias Output = (url: URL, response: URLResponse) public typealias Failure = Error @@ -129,7 +129,7 @@ extension URLSession.DownloadTaskPKPublisher { if let error = error { downstream.receive(completion: .failure(error)) - } else if let url = url, let response = response as? HTTPURLResponse { + } else if let url = url, let response = response { _ = downstream.receive((url, response)) downstream.receive(completion: .finished) } else { diff --git a/Sources/PublisherKit/Publishers/URLSession/Upload Task.swift b/Sources/PublisherKit/Publishers/URLSession/Upload Task.swift index 8ced51e..6dcd752 100644 --- a/Sources/PublisherKit/Publishers/URLSession/Upload Task.swift +++ b/Sources/PublisherKit/Publishers/URLSession/Upload Task.swift @@ -40,7 +40,7 @@ extension URLSession { public struct UploadTaskPKPublisher: PublisherKit.Publisher { - public typealias Output = (data: Data, response: HTTPURLResponse) + public typealias Output = (data: Data, response: URLResponse) public typealias Failure = Error @@ -124,7 +124,7 @@ extension URLSession.UploadTaskPKPublisher { if let error = error { downstream.receive(completion: .failure(error)) - } else if let response = response as? HTTPURLResponse, let data = data { + } else if let response = response, let data = data { _ = downstream.receive((data, response)) downstream.receive(completion: .finished) } else { diff --git a/Sources/PublisherKit/Publishers/URLSession/Validate.swift b/Sources/PublisherKit/Publishers/URLSession/Validate.swift index aa04680..dce8b3d 100644 --- a/Sources/PublisherKit/Publishers/URLSession/Validate.swift +++ b/Sources/PublisherKit/Publishers/URLSession/Validate.swift @@ -18,9 +18,9 @@ public enum AcceptableContentTypes { extension Publishers { - public struct Validate: Publisher where Upstream.Output == (data: Data, response: HTTPURLResponse) { + public struct Validate: Publisher where Upstream.Output == (data: Data, response: URLResponse) { - public typealias Output = Upstream.Output + public typealias Output = (data: Data, response: HTTPURLResponse) public typealias Failure = Error @@ -159,7 +159,11 @@ private extension Publishers.Validate.Inner { func validate(input: Input) -> Result { - let (data, response) = input + let (data, _response) = input + + guard let response = _response as? HTTPURLResponse else { + return .failure(URLError.onlyHTTPSupported()) + } guard acceptableStatusCodes.contains(response.statusCode) else {