Skip to content

Instantly share code, notes, and snippets.

@lexuanquynh
Created February 1, 2023 00:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lexuanquynh/5d1f03c29753beaeef5e2e9178c28350 to your computer and use it in GitHub Desktop.
Save lexuanquynh/5d1f03c29753beaeef5e2e9178c28350 to your computer and use it in GitHub Desktop.
//
// ErrorTracker.swift
// goldProject
//
// Created by Admintrator Admin on 11/17/22.
// Copyright © 2022 Code toan bug. All rights reserved.
//
import Foundation
import RxSwift
import RxCocoa
final class ErrorTracker: SharedSequenceConvertibleType {
typealias SharingStrategy = DriverSharingStrategy
private let _subject = PublishSubject<Error>()
func trackError<O: ObservableConvertibleType>(from source: O) -> Observable<O.Element> {
return source.asObservable().do(onError: onError)
}
func asSharedSequence() -> SharedSequence<SharingStrategy, Error> {
return _subject.asObservable().asDriverOnErrorJustComplete()
}
func asObservable() -> Observable<Error> {
return _subject.asObservable()
}
private func onError(_ error: Error) {
_subject.onNext(error)
}
deinit {
_subject.onCompleted()
}
}
extension ObservableConvertibleType {
func trackError(_ errorTracker: ErrorTracker) -> Observable<Element> {
return errorTracker.trackError(from: self)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment