Advertisement
Guest User

Untitled

a guest
Jan 15th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.88 KB | None | 0 0
  1. public func get() -> Response<[Order],String> {
  2.             return get(page: 1).flatMap { result in
  3.                 guard let page = result.value else { return .just(.init(error: result.error!)) }
  4.                 if page.totalPages == 1 {
  5.                     return .just(.init(value: page.content))
  6.                 } else {
  7.                     let iterator = (2...page.totalPages)
  8.                     let sequences = iterator.map{ self.get(page: $0).asObservable() }
  9.                     let concatenation = Observable.concat(sequences)
  10.                     let scaning: Observable<Result<Page<Order>, DictionaryError<String>>> = concatenation.scan(result, accumulator: { (totalResult, result) in
  11.                         switch (totalResult, result) {
  12.                         case (.failure(let error), _): throw error
  13.                         case (_, .failure(let error)): throw error
  14.                         case (.success(let totalPage), .success(let newPage)): return .init(value: Page.new(content: totalPage.content + newPage.content, index: totalPage.index, totalPages: totalPage.totalPages))
  15.                         }
  16.                     })
  17.                     let driver = scaning.asDriver(onErrorRecover: { (error) -> Response<Page<Order>,String> in
  18.                         return .just(.init(error: error as! DictionaryError<String>))
  19.                     })
  20.                     let resultingDriver: Response<[Order],String> = driver.map{
  21.                         switch $0 {
  22.                         case .success(let sumPage): return .init(value: sumPage.content)
  23.                         case .failure(let error): return .init(error: error)
  24.                         }
  25.                     }
  26.                     return resultingDriver
  27.                 }
  28.             }
  29.         }
  30.        
  31.         private func get(page: Int) -> Response<Page<Order>,String> {
  32.             return .empty()
  33.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement