Created
August 1, 2019 10:10
-
-
Save Andrea-Scuderi/2ff5ce8c284f0e3abdfb71823384edf4 to your computer and use it in GitHub Desktop.
Part 6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Use of the dataTaskPublisher API to implement Publisher with the decoded data | |
struct Token: Codable { | |
let string: String | |
} | |
// We'll use the following function to validate our dataTaskPublisher output in the pipeline | |
func validate(_ data: Data, _ response: URLResponse) throws -> Data { | |
guard let httpResponse = response as? HTTPURLResponse else { | |
throw APIError.invalidResponse | |
} | |
guard (200..<300).contains(httpResponse.statusCode) else { | |
throw APIError.statusCode(httpResponse.statusCode) | |
} | |
return data | |
} | |
func create(user: User) -> AnyPublisher<CreateUserResponse, Error>? { | |
return try? postUser(user: user) | |
.tryMap{ try validate($0.data, $0.response) } | |
.decode(type: CreateUserResponse.self, decoder: JSONDecoder()) | |
.eraseToAnyPublisher() | |
} | |
func login(email: String, password: String) -> AnyPublisher<Token, Error> { | |
return postLogin(email: email, password: password) | |
.tryMap{ try validate($0.data, $0.response) } | |
.decode(type: Token.self, decoder: JSONDecoder()) | |
.eraseToAnyPublisher() | |
} | |
func postTodo(authToken: String, todo: Todo) -> AnyPublisher<Todo, Error> { | |
return postTodo(authToken: authToken, body: todo) | |
.tryMap{ try validate($0.data, $0.response) } | |
.decode(type: Todo.self, decoder: JSONDecoder()) | |
.eraseToAnyPublisher() | |
} | |
func getTodo(authToken: String) -> AnyPublisher<[Todo], Error> { | |
return getTodo(authToken: authToken) | |
.tryMap{ try validate($0.data, $0.response) } | |
.decode(type: [Todo].self, decoder: JSONDecoder()) | |
.eraseToAnyPublisher() | |
} | |
func deleteTodo(authToken: String, id: Int) -> AnyPublisher<Todo, Error> { | |
return deleteTodo(authToken: authToken, id: id) | |
.tryMap{ try validate($0.data, $0.response) } | |
.decode(type: Todo.self, decoder: JSONDecoder()) | |
.eraseToAnyPublisher() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment