Skip to content

Instantly share code, notes, and snippets.

@karenxpn
Last active March 23, 2021 23:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karenxpn/a509f77eebefa55563f7732824bc4e32 to your computer and use it in GitHub Desktop.
Save karenxpn/a509f77eebefa55563f7732824bc4e32 to your computer and use it in GitHub Desktop.
Our service to fetch server response and parse it
import Foundation
import Combine
import Alamofire
protocol ServiceProtocol {
func fetchChats() -> AnyPublisher<DataResponse<ChatListModel, NetworkError>, Never>
}
class Service {
static let shared: ServiceProtocol = Service()
private init() { }
}
extension Service: ServiceProtocol {
func fetchChats() -> AnyPublisher<DataResponse<ChatListModel, NetworkError>, Never> {
let url = URL(string: "Your_URL")!
return AF.request(url,
method: .get)
.validate()
.publishDecodable(type: ChatListModel.self)
.map { response in
response.mapError { error in
let backendError = response.data.flatMap { try? JSONDecoder().decode(BackendError.self, from: $0)}
return NetworkError(initialError: error, backendError: backendError)
}
}
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment