TheAngryDarling / SwiftWebRequestOpenCombine

Provides cross platform Publisher methods, using OpenCombine, to the WebRequest classes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Web Request Open Combine

swift >= 5.0 macOS iOS tvOS watchOS Linux Apache 2.0

Provides cross platform Publisher methods, using OpenCombine, to the WebRequest classes

Requirements

  • Swift 5.0+
  • OpenSwift

Usage

Data Web Request

let session: URLSession = ....

// From The Web Request itself
let request = WebRequest.DataRequest(URL(string: "http://.....")!, usingSession: session)
let cancellable = request.publisher().sink(
    receiveCompletion: { c in
        switch c in {
            case .finished:
                // finished successfully
            case .failure(let e):
                // finished with error
        }
    },
    receiveValue: { r in 
        // The Data Received
        let dta = r.value
        // The URL Response
        let response = r.response
    }
)

// From the URL Session directly
let cancellable = session.webRequestDataTaskPublisher(for: URL(string: "http://.....")!)
    .sink(
        receiveCompletion: { c in
            switch c in {
                case .finished:
                    // finished successfully
                case .failure(let e):
                    // finished with error
            }
        },
        receiveValue: { r in 
            // The Data Received
            let dta = r.value
            // The URL Response
            let response = r.response
        }
    )

Data Event Web Request

let session: URLSession = ....

// From The Web Request itself
let request = WebRequest.DataRequest(URL(string: "http://.....")!, usingSession: session)
let cancellable = request.dataEventPublisher().sink(
    receiveCompletion: { c in
        switch c in {
            // Note: Cancelling the request and/or publisher
            // will not produce an error here, it will
            // just return finished
            case .finished:
                // finished successfully
            case .failure(let e):
                // finished with error
        }
    },
    receiveValue: { r in 
        // The Data Received
        let dta = r.value
        // The URL Response
        let response = r.response
    }
)

// From the URL Session directly
let cancellable = session.webRequestDataEventTaskPublisher(for: URL(string: "http://.....")!)
    .sink(
        receiveCompletion: { c in
            switch c in {
                case .finished:
                    // finished successfully
                case .failure(let e):
                    // finished with error
            }
        },
        receiveValue: { r in 
            // The Data Received
            let dta = r.value
            // The URL Response
            let response = r.response
        }
    )

Download Web Request

let session: URLSession = ....

// From The Web Request itself
let request = WebRequest.DownloadRequest(URL(string: "http://.....")!, usingSession: session)
let cancellable = request.publisher().sink(
    receiveCompletion: { c in
        switch c in {
            case .finished:
                // finished successfully
            case .failure(let e):
                // finished with error
        }
    },
    receiveValue: { r in 
        // The URL to the location the file was downloaded to
        let url = r.value
        // The URL Response
        let response = r.response
    }
)

// From the URL Session directly
let cancellable = session.webRequestDownloadTaskPublisher(for: URL(string: "http://.....")!)
    .sink(
        receiveCompletion: { c in
            switch c in {
                case .finished:
                    // finished successfully
                case .failure(let e):
                    // finished with error
            }
        },
        receiveValue: { r in 
            // The URL to the location the file was downloaded to
            let url = r.value
            // The URL Response
            let response = r.response
        }
    )

Upload Web Request

let session: URLSession = ....

// From The Web Request itself
let request = WebRequest.UploadRequest(URL(string: "http://.....")!, 
                                       fromFile: URL(....), 
                                       usingSession: session)
let cancellable = request.publisher().sink(
    receiveCompletion: { c in
        switch c in {
            case .finished:
                // finished successfully
            case .failure(let e):
                // finished with error
        }
    },
    receiveValue: { r in 
        // The data response from the upload
        let url = r.value
        // The URL Response
        let response = r.response
    }
)

// From the URL Session directly
let cancellable = session.webRequestUploadTaskPublisher(for: URL(string: "http://.....")!,
                                                        fromFile: URL(...))
    .sink(
        receiveCompletion: { c in
            switch c in {
                case .finished:
                    // finished successfully
                case .failure(let e):
                    // finished with error
            }
        },
        receiveValue: { r in 
            // The data response from the upload
            let url = r.value
            // The URL Response
            let response = r.response
        }
    )

Dependencies

  • WebRequest - The core WebRequest package this package extends to provide Publisher features
  • OpenCombine - The 3rd party package that is a replacement for Swift Combine to make this package cross platform compatible
  • LittleWebServer - Used in the Test Cases as a local server to test request cases and generate testable responses

Author

  • Tyler Anger - Initial work

License

Copyright 2022 Tyler Anger

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

HERE or http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Provides cross platform Publisher methods, using OpenCombine, to the WebRequest classes

License:Apache License 2.0


Languages

Language:Swift 100.0%