Reactive wrapper for URLSession using Combine. At its core, the library consist of the NetworkServiceClient
protocol along with a minimal implementation NetworkService
.
A notable convenience the library provides is the TopLevelCodable
protocol that enables easy encoding and decoding of conforming types. The protocol associates a TopLevelEncoder
and TopLevelDecoder
with a given type so that it is used by the library without explicitly passing it as a parameter. Additionally, TopLevelEncodable
and TopLevelDecodable
are included.
import NetworkService
let networkService = NetworkService()
let url = URL(string: "http://www.foobar.com")!
struct Foo: TopLevelCodable {
static var encoder: JSONEncoder { JSONEncoder() }
static var decoder: JSONDecoder { JSONDecoder() }
let bar: Int
}
let foo = Foo(bar: 0)
let publisher: AnyPublisher<Foo, Failuer> = networkService.get(url)
let cancellable = publisher.assertNoFailure().sink { foo in
print(foo.bar)
}
let publisher: AnyPublisher<Foo, Failuer> = networkService.post(foo, to: url)
let cancellable = publisher.assertNoFailure().sink { foo in
print(foo.bar)
}
let publisher: AnyPublisher<Foo, Failuer> = networkService.put(foo, to: url)
let cancellable = publisher.assertNoFailure().sink { foo in
print(foo.bar)
}
let publisher: AnyPublisher<Foo, Failuer> = networkService.get(url)
let cancellable = publisher.assertNoFailure().sink { _ in }
var request = URLRequest(url: url)
request.method = .GET
let publisher: AnyPublisher<Foo, Failuer> = networkService.start(request)
let cancellable = publisher.assertNoFailure().sink { foo in
print(foo.bar)
}
Provides MockNetworkService
which is an implementation of NetworkServiceClient
for testing. Supports defining set output values for all network functions, repeating values, and delaying responses.
Currently, only Swift Package Manager is supported.
link |
Stars: 2 |
Last commit: Yesterday |
Full Changelog: https://github.com/MFB-Technologies-Inc/NetworkService/compare/2.1.4...3.0.0
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics