Files
2023-01-14 01:40:25 +03:00

85 lines
2.3 KiB
Swift

//
// NetworkService.swift
//
//
// Created by Juraldinio on 04.08.2022.
//
import Foundation
import Alamofire
public struct NetworkStaticAPIRecord {
public typealias Headers = [String: String]
public let url: URL
public let headers: Headers?
public init(url: URL, headers: Headers?) {
self.url = url
self.headers = headers
}
var httpHeaders: HTTPHeaders? {
guard let headers = self.headers else { return nil }
return HTTPHeaders(headers.compactMap { key, value in HTTPHeader(name: key, value: value) })
}
}
public struct NetworkDynamicAPIRecord {
public typealias Headers = [String: String]
public typealias Dynamic = () -> URL
public let url: Dynamic
public let headers: Headers?
public init(url: @escaping Dynamic, headers: Headers?) {
self.url = url
self.headers = headers
}
var httpHeaders: HTTPHeaders? {
guard let headers = self.headers else { return nil }
return HTTPHeaders(headers.compactMap { key, value in HTTPHeader(name: key, value: value) })
}
}
public protocol NetworkEnvironment {
var configuration: URLSessionConfiguration? { get }
var usernames: NetworkStaticAPIRecord { get }
var backend: NetworkStaticAPIRecord { get }
var hyperion: NetworkDynamicAPIRecord { get }
var node: NetworkDynamicAPIRecord { get }
func isEquals(other: NetworkEnvironment) -> Bool
}
public protocol NetworkService {
init(environment: NetworkEnvironment)
}
public enum NetworkServiceError: Error {
case invalidUrl
case gqlSystem([String])
case gqlApplication(String)
case gqlDecode(String)
case uncatched
}
// MARK: - Equatable
extension NetworkEnvironment {
public func isEquals(other: NetworkEnvironment) -> Bool {
return self.configuration == other.configuration &&
self.usernames.url == other.usernames.url &&
self.usernames.headers == other.usernames.headers &&
self.backend.url == other.backend.url &&
self.backend.headers == other.backend.headers &&
self.hyperion.url() == other.hyperion.url() &&
self.hyperion.headers == other.hyperion.headers &&
self.node.url() == other.node.url() &&
self.node.headers == other.node.headers
}
}