NetworkService.swift 903 B

123456789101112131415161718192021222324252627282930
  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. // debug(.nightscout, "\(request.httpMethod!) ***\(request.url!.path)\(request.url!.query.map { "?" + $0 } ?? "")")
  15. URLSession.shared
  16. .dataTaskPublisher(for: request)
  17. .tryMap { data, response in
  18. let code = (response as! HTTPURLResponse).statusCode
  19. guard 200 ..< 300 ~= code else {
  20. throw NetworkError.badStatusCode(.init(statusCode: code))
  21. }
  22. return data
  23. }
  24. .eraseToAnyPublisher()
  25. }
  26. }