Skip to content

Instantly share code, notes, and snippets.

@sergdort
Last active July 6, 2017 16:05
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 sergdort/4fd936109a362347d9009f9a4d2b60dd to your computer and use it in GitHub Desktop.
Save sergdort/4fd936109a362347d9009f9a4d2b60dd to your computer and use it in GitHub Desktop.
final class Sink<O: ObserverType>: Disposable {
private var _disposed: Bool = false
private let _forward: O
private let _subscriptionHandler: (Observer<O.E>) -> Disposable
private let _composite = CompositeDisposable()
init(forvard: O, subscriptionHandler: @escaping (Observer<O.E>) -> Disposable) {
_forward = forvard
_subscriptionHandler = subscriptionHandler
}
func run() {
let observer = Observer<O.E>(handler: forward)
_composite.add(disposable: _subscriptionHandler(observer))
}
private func forward(event: Event<O.E>) {
if _disposed {
return
}
_forward.on(event: event)
switch event {
case .completed, .error:
self.dispose()
default:
break
}
}
func dispose() {
_disposed = true
_composite.dispose()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment