import LeadKit import RxSwift import Alamofire {% set serviceName = concat(networkServiceName, "NetworkService") -%} {% set protocolName = concat(networkServiceName, "NetworkProtocol") -%} public protocol {{ protocolName }} { func apiRequest(with parametersSingle: Single, additionalValidStatusCodes: Set, decoder: JSONDecoder) -> Single func deferredApiRequestParameters(relativeUrl: String, method: HTTPMethod, parameters: Parameters?, requestEncoding: ParameterEncoding?, requestHeaders: HTTPHeaders?) -> Single {% for method in methods %} {%- include 'blocks/method/method-declaration.twig' with { method: method, isStatic: false } -%} {% endfor %} } open class {{ serviceName }}: NetworkService, {{ protocolName }} { public static let apiBaseUrl = "{{ apiUrl }}" public convenience init() { self.init(configuration: NetworkServiceConfiguration(baseUrl: {{ serviceName }}.apiBaseUrl)) } open func apiRequest(with parametersSingle: Single, additionalValidStatusCodes: Set = [], decoder: JSONDecoder = JSONDecoder()) -> Single { return parametersSingle.flatMap { self.rxRequest(with: $0, additionalValidStatusCodes: additionalValidStatusCodes, decoder: decoder).map { $0.model }.asSingle() } } open func deferredApiRequestParameters(relativeUrl: String, method: HTTPMethod = .get, parameters: Parameters? = nil, requestEncoding: ParameterEncoding? = nil, requestHeaders: HTTPHeaders? = nil) -> Single { return .deferredJust { self.configuration.apiRequestParameters(relativeUrl: relativeUrl, method: method, parameters: parameters, requestEncoding: requestEncoding, requestHeaders: requestHeaders) } } } {{ "\n" }}