diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift index f48d09bb..0dadeb93 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift @@ -28,23 +28,25 @@ public extension Reactive where Base: Alamofire.SessionManager { /// Method which executes request and serializes response into target object /// /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameter mappingQueue: The dispatch queue to use for mapping /// - Returns: Observable with HTTP URL Response and target object - func responseModel(requestParameters: ApiRequestParameters) -> Observable<(HTTPURLResponse, T)> { + func responseModel(requestParameters: ApiRequestParameters, + mappingQueue: DispatchQueue = DispatchQueue.global()) -> Observable<(HTTPURLResponse, T)> { return apiRequest(requestParameters: requestParameters) - .observeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated)) - .flatMap { $0.rx.apiResponse() } + .flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) } } /// Method which executes request and serializes response into target object /// /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameter mappingQueue: The dispatch queue to use for mapping /// - Returns: Observable with HTTP URL Response and target object - func responseObservableModel(requestParameters: ApiRequestParameters) -> - Observable<(HTTPURLResponse, T)> where T.ModelType == T { + func responseObservableModel(requestParameters: ApiRequestParameters, + mappingQueue: DispatchQueue = DispatchQueue.global()) -> Observable<(HTTPURLResponse, T)> + where T.ModelType == T { return apiRequest(requestParameters: requestParameters) - .observeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated)) - .flatMap { $0.rx.apiResponse() } + .flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) } } } diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift index cf33202d..a6cfe6ef 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift @@ -15,25 +15,37 @@ public extension Reactive where Base: DataRequest { /// Method which serializes response into target object /// + /// - Parameter mappingQueue: The dispatch queue to use for mapping /// - Returns: Observable with HTTP URL Response and target object - func apiResponse() -> Observable<(HTTPURLResponse, T)> { - return responseJSON().map { resp, value in - let json = try cast(value) as [String: Any] + func apiResponse(mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(HTTPURLResponse, T)> { - return (resp, try T(JSON: json)) - } + return responseJSONOnQueue(mappingQueue) + .map { resp, value in + let json = try cast(value) as [String: Any] + + return (resp, try T(JSON: json)) + } } /// Method which serializes response into target object /// + /// - Parameter mappingQueue: The dispatch queue to use for mapping /// - Returns: Observable with HTTP URL Response and target object - func apiResponse() -> Observable<(HTTPURLResponse, T)> where T.ModelType == T { - return responseJSON().flatMap { resp, value -> Observable<(HTTPURLResponse, T)> in - let json = try cast(value) as [String: Any] + func apiResponse(mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(HTTPURLResponse, T)> where T.ModelType == T { - return T.createFrom(map: Map(mappingType: .fromJSON, JSON: json)) - .map { (resp, $0) } - } + return responseJSONOnQueue(mappingQueue) + .flatMap { resp, value -> Observable<(HTTPURLResponse, T)> in + let json = try cast(value) as [String: Any] + + return T.createFrom(map: Map(mappingType: .fromJSON, JSON: json)) + .map { (resp, $0) } + } + } + + internal func responseJSONOnQueue(_ queue: DispatchQueue) -> Observable<(HTTPURLResponse, Any)> { + return responseResult(queue: queue, responseSerializer: DataRequest.jsonResponseSerializer(options: .allowFragments)) } }