@@ -14,7 +14,7 @@ public protocol Session {
1414 func dataTask( with request: NSURLRequest , completionHandler: @escaping DataTaskResult ) -> DataTask
1515
1616 @available ( iOS 13 . 0 , OSX 10 . 15 , tvOS 13 . 0 , watchOS 6 . 0 , macCatalyst 13 . 0 , * )
17- func dataTaskPublisher< T : TaskPublisher > ( for request: NSURLRequest ) -> T
17+ func dataTaskPublisher( for request: NSURLRequest ) -> AnyPublisher < Data , NetworkError >
1818}
1919
2020// Make URLSession connform to Session protocol
@@ -24,8 +24,13 @@ extension URLSession: Session {
2424 }
2525
2626 @available ( iOS 13 . 0 , OSX 10 . 15 , tvOS 13 . 0 , watchOS 6 . 0 , macCatalyst 13 . 0 , * )
27- public func dataTaskPublisher< T: TaskPublisher > ( for request: NSURLRequest ) -> T {
28- dataTaskPublisher ( for: request as URLRequest ) as! T
27+ public func dataTaskPublisher( for request: NSURLRequest ) -> AnyPublisher < Data , NetworkError > {
28+ dataTaskPublisher ( for: request as URLRequest )
29+ . mapError ( { urlError -> NetworkError in
30+ NetworkError . failure ( message: urlError. localizedDescription)
31+ } )
32+ . flatMap ( maxPublishers: . max( 1 ) ) { Just ( $0. data) . setFailureType ( to: NetworkError . self) }
33+ . eraseToAnyPublisher ( )
2934 }
3035}
3136
@@ -36,15 +41,3 @@ public protocol DataTask {
3641
3742// Make URLSessionDataTask conform to DataTask protocol
3843extension URLSessionDataTask : DataTask { }
39-
40- /// Protocol that allows dependecy injection for the express purpose of mocking `URLSession` during testing. This should not be used elsewhere
41- @available ( iOS 13 . 0 , OSX 10 . 15 , tvOS 13 . 0 , watchOS 6 . 0 , macCatalyst 13 . 0 , * )
42- public protocol TaskPublisher : Publisher { }
43-
44- // Make DataTaskPublisher conform to TaskPublisher protocol
45- @available ( iOS 13 . 0 , OSX 10 . 15 , tvOS 13 . 0 , watchOS 6 . 0 , macCatalyst 13 . 0 , * )
46- extension URLSession . DataTaskPublisher : TaskPublisher { }
47-
48- // Make AnyPublisher conform to TaskPublisher protocol
49- @available ( iOS 13 . 0 , OSX 10 . 15 , tvOS 13 . 0 , watchOS 6 . 0 , macCatalyst 13 . 0 , * )
50- extension AnyPublisher : TaskPublisher { }
0 commit comments