api-generator-templates/Swift/NetworkService.swift.twig

51 lines
2.3 KiB
Twig

import LeadKit
import RxSwift
import Alamofire
{% set serviceName = concat(networkServiceName, "NetworkService") -%}
{% set protocolName = concat(networkServiceName, "NetworkProtocol") -%}
public protocol {{ protocolName }} {
func apiRequest<T: Decodable>(with parametersSingle: Single<ApiRequestParameters>, additionalValidStatusCodes: Set<Int>, decoder: JSONDecoder) -> Single<T>
func deferredApiRequestParameters(relativeUrl: String,
method: HTTPMethod,
parameters: Parameters?,
requestEncoding: ParameterEncoding?,
requestHeaders: HTTPHeaders?) -> Single<ApiRequestParameters>
{% 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<T: Decodable>(with parametersSingle: Single<ApiRequestParameters>, additionalValidStatusCodes: Set<Int> = [], decoder: JSONDecoder = JSONDecoder()) -> Single<T> {
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<ApiRequestParameters> {
return .deferredJust {
self.configuration.apiRequestParameters(relativeUrl: relativeUrl,
method: method,
parameters: parameters,
requestEncoding: requestEncoding,
requestHeaders: requestHeaders)
}
}
}
{{ "\n" }}