85 lines
2.3 KiB
Swift
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
|
|
}
|
|
}
|