Swiftpack.co - ViacomInc/URLSessionDecodable as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ViacomInc.
ViacomInc/URLSessionDecodable 0.1.2
A swift package for adding decoding functionality to URLSession
⭐️ 4
🕓 1 year ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/ViacomInc/URLSessionDecodable.git", from: "0.1.2")


A swift package for adding decoding functionality to URLSession. It is a very small but handful library, that solves the common pattern of deserialization of a response, and fallback on another message format in case of an HTTP error.

We have been using it in some form over the years at former Viacom, now Paramount. Since Swift Package Manager support in Xcode 11.0, we use it on production in several projects.


Swift Package Manager

Add to your Package.swift:

dependencies: [
    .package(url: "https://github.com/ViacomInc/URLSessionDecodable.git", .upToNextMajor(from: "0.1.0"))


Example usage, fetching a response that has a specific error format if error is handled by a backend:

struct AnimalsResponse: Decodable {
    let name: String

struct AnimalsError: Error {
    // optional, there are also other errors than the ones handled by a backend 
    let errorResponse: ErrorResponse? 

struct ErrorResponse: Decodable {
    let userMessage: String

func getFavoriteAnimals(urlSession: URLSession = .shared,
                        completionHandler: (Result<AnimalsResponse, AnimalsError>) -> Void) -> Cancelable {
	let url = URL(string: "https://myservice.com/favoriteAnimals")!
	return urlSession.decodableTask(with: url,
	                                method: .get,
	                                parameters: nil,
	                                headers: nil,
	                                decoder: JSONDecoder()) { result in
	    switch result {
	    	case .success(let animals):
	    	case .failure(let error):
	    	   let animalsFetchError: ErrorResponse? = error.decodeResponse(using: JSONDecoder())
	    	   completionHandler(.failure(AnimalsError(errorResponse: animalsFetchError)))


Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.


URLSessionDecodable is released under the Apache 2.0 license. See LICENSE for details.


Stars: 4
Last commit: 1 week ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

0.1.2 Keeping existing query paramaters
1 year ago

Just one change, making sure existing query parameters on url are not removed when adding new via parameterers argument.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics