0001    //
0002    //  Using.swift
0003    //  Rx
0004    //
0005    //  Created by Yury Korolev on 10/15/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    class UsingSink
Using.swift:74
        let sink = UsingSink(parent: self, observer: observer)
<SourceType
Using.swift:13
    typealias Parent = Using<SourceType, ResourceType>
, ResourceType
Using.swift:13
    typealias Parent = Using<SourceType, ResourceType>
: Disposable, O
Using.swift:11
class UsingSink<SourceType, ResourceType: Disposable, O: ObserverType where O.E == SourceType> : Sink<O>, ObserverType {
Using.swift:14
    typealias E = O.E
Using.swift:18
    init(parent: Parent, observer: O) {
: ObserverType where O.E == SourceType> : Sink<O>, ObserverType { 0012 0013 typealias Parent
Using.swift:16
    private let _parent: Parent
Using.swift:18
    init(parent: Parent, observer: O) {
= Using<SourceType, ResourceType> 0014 typealias E
Using.swift:43
    func on(event: Event<E>) {
= O.E 0015 0016 private let _parent
Using.swift:19
        _parent = parent
Using.swift:27
            let resource = try _parent._resourceFactory()
Using.swift:29
            let source = try _parent._observableFactory(resource)
: Parent 0017 0018 init
Using.swift:74
        let sink = UsingSink(parent: self, observer: observer)
(parent: Parent, observer: O) { 0019 _parent = parent 0020 super.init(observer: observer) 0021 } 0022 0023 func run
Using.swift:75
        sink.disposable = sink.run()
() -> Disposable { 0024 var disposable = NopDisposable.instance 0025 0026 do { 0027 let resource = try _parent._resourceFactory() 0028 disposable = resource 0029 let source = try _parent._observableFactory(resource) 0030 0031 return StableCompositeDisposable.create( 0032 source.subscribe(self), 0033 disposable 0034 ) 0035 } catch let error { 0036 return StableCompositeDisposable.create( 0037 Observable.error(error).subscribe(self), 0038 disposable 0039 ) 0040 } 0041 } 0042 0043 func on(event: Event<E>) { 0044 switch event { 0045 case let .Next(value): 0046 forwardOn(.Next(value)) 0047 case let .Error(error): 0048 forwardOn(.Error(error)) 0049 dispose() 0050 case .Completed: 0051 forwardOn(.Completed) 0052 dispose() 0053 } 0054 } 0055 } 0056 0057 class Using
Observable+Creation.swift:172
        return Using(resourceFactory: resourceFactory, observableFactory: observableFactory)
Using.swift:13
    typealias Parent = Using<SourceType, ResourceType>
<SourceType
Using.swift:57
class Using<SourceType, ResourceType: Disposable>: Producer<SourceType> {
Using.swift:59
    typealias E = SourceType
Using.swift:62
    typealias ObservableFactory = ResourceType throws -> Observable<SourceType>
, ResourceType
Using.swift:61
    typealias ResourceFactory = () throws -> ResourceType
Using.swift:62
    typealias ObservableFactory = ResourceType throws -> Observable<SourceType>
: Disposable>: Producer<SourceType> { 0058 0059 typealias E
Using.swift:73
    override func run<O : ObserverType where O.E == E>(observer: O) -> Disposable {
= SourceType 0060 0061 typealias ResourceFactory
Using.swift:64
    private let _resourceFactory: ResourceFactory
Using.swift:68
    init(resourceFactory: ResourceFactory, observableFactory: ObservableFactory) {
= () throws -> ResourceType 0062 typealias ObservableFactory
Using.swift:65
    private let _observableFactory: ObservableFactory
Using.swift:68
    init(resourceFactory: ResourceFactory, observableFactory: ObservableFactory) {
= ResourceType throws -> Observable<SourceType> 0063 0064 private let _resourceFactory
Using.swift:27
            let resource = try _parent._resourceFactory()
Using.swift:69
        _resourceFactory = resourceFactory
: ResourceFactory 0065 private let _observableFactory
Using.swift:29
            let source = try _parent._observableFactory(resource)
Using.swift:70
        _observableFactory = observableFactory
: ObservableFactory 0066 0067 0068 init
Observable+Creation.swift:172
        return Using(resourceFactory: resourceFactory, observableFactory: observableFactory)
(resourceFactory: ResourceFactory, observableFactory: ObservableFactory) { 0069 _resourceFactory = resourceFactory 0070 _observableFactory = observableFactory 0071 } 0072 0073 override func run<O : ObserverType where O.E == E>(observer: O) -> Disposable { 0074 let sink = UsingSink(parent: self, observer: observer) 0075 sink.disposable = sink.run() 0076 return sink 0077 } 0078 }