@@ -466,6 +466,9 @@ open class RxRestClient {
466466 /// - Returns: An observable of a the response state
467467 public func run< T: ResponseState > ( _ request: Observable < DataRequest > ) -> Observable < T > {
468468 return request
469+ . validate { [ unowned self] request, response, data in
470+ return self . validate ( request, response, data)
471+ }
469472 . flatMap { [ options] request -> Observable < ( HTTPURLResponse , T . Body ? ) > in
470473 options. logger? . log ( request)
471474
@@ -476,16 +479,17 @@ open class RxRestClient {
476479 return request. rx. responseData ( ) . map { ( $0. 0 , $0. 1 as? T . Body ) }
477480 }
478481 }
479- . retry ( options. retryCount)
480482 . observeOn ( backgroundWorkScheduler)
481483 . map { ( httpResponse, body) -> RestResponseStatus in
482-
483- if let response = RxRestClient . checkBaseResponse ( httpResponse , body ) {
484- return . base ( state : RxRestClient . checkBaseState ( response : response ) )
485- } else {
486- return . custom ( response : ( httpResponse , body ) )
484+ return . custom ( response : ( httpResponse , body ) )
485+ }
486+ . catchError { e in
487+ if let response = e as? BaseResponse {
488+ return Observable . just ( . base ( state : RxRestClient . checkBaseState ( response : response ) ) )
487489 }
490+ return Observable . error ( e)
488491 }
492+ . retry ( options. retryCount)
489493 . retryOnBecomesReachable ( . base( state: BaseState . offline) , reachabilityService: reachabilityService)
490494 . flatMap { response -> Observable < T > in
491495 switch response {
@@ -670,6 +674,21 @@ open class RxRestClient {
670674 )
671675 }
672676
677+ /// Do validation of response
678+ ///
679+ /// - Parameters:
680+ /// - request: URL Request
681+ /// - response: URL Response
682+ /// - data: Response body
683+ /// - Returns: ValidationResult
684+ open func validate( _ request: URLRequest ? , _ response: HTTPURLResponse , _ data: Data ? ) -> Request . ValidationResult {
685+
686+ if let baseResponse = RxRestClient . checkBaseResponse ( response, data) {
687+ return . failure( baseResponse)
688+ }
689+ return . success
690+ }
691+
673692 // MARK: - Checking base response cases
674693 /// Checking base response cases.
675694 ///
0 commit comments