51 lines
2.3 KiB
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" }}
|