NetworkService.swift 775 B

1234567891011121314151617181920212223242526272829
  1. import Combine
  2. import Foundation
  3. enum NetworkError: Error, LocalizedError {
  4. case badStatusCode(HTTPResponseStatus)
  5. var errorDescription: String? {
  6. switch self {
  7. case let .badStatusCode(code):
  8. return code.reasonPhrase
  9. }
  10. }
  11. }
  12. struct NetworkService {
  13. func run(_ request: URLRequest) -> AnyPublisher<Data, Error> {
  14. URLSession.shared
  15. .dataTaskPublisher(for: request)
  16. .tryMap { data, response in
  17. let code = (response as! HTTPURLResponse).statusCode
  18. guard 200 ..< 300 ~= code else {
  19. throw NetworkError.badStatusCode(.init(statusCode: code))
  20. }
  21. return data
  22. }
  23. .eraseToAnyPublisher()
  24. }
  25. }