import LeadKit import RxSwift import Alamofire {% set serviceName = concat(networkServiceName, "NetworkService") -%} {% set protocolName = concat(networkServiceName, "NetworkProtocol") -%} protocol {{ protocolName }} { func apiRequest(with parametersSingle: Single, 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 %} } class {{ serviceName }}: NetworkService, {{ protocolName }} { static let apiBaseUrl = "{{ apiUrl }}" convenience init() { self.init(configuration: NetworkServiceConfiguration(baseUrl: {{ serviceName }}.apiBaseUrl)) } func apiRequest(with parametersSingle: Single, decoder: JSONDecoder = JSONDecoder()) -> Single { return parametersSingle.flatMap { self.rxRequest(with: $0, decoder: decoder).map { $0.model }.asSingle() } } 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" }}