1- // Copyright (c) 2021 PassiveLogic, Inc.
2-
3- import RxSwift
4-
51/// Abstract event stream class - Should be overridden for actual implementations
62open class EventStream < Element> {
73 public init ( ) { }
@@ -10,74 +6,3 @@ open class EventStream<Element> {
106 fatalError ( " This function should be overridden by implementing classes " )
117 }
128}
13-
14-
15- // TODO: Put in separate GraphQLRxSwift package
16-
17- // EventStream wrapper for Observable
18- public class ObservableEventStream < Element> : EventStream < Element > {
19- public var observable : Observable < Element >
20- init ( _ observable: Observable < Element > ) {
21- self . observable = observable
22- }
23- override open func map< To> ( _ closure: @escaping ( Element ) throws -> To ) -> EventStream < To > {
24- return ObservableEventStream < To > ( observable. map ( closure) )
25- }
26- }
27- // Convenience types
28- public typealias ObservableSourceEventStream = ObservableEventStream < Future < Any > >
29- public typealias ObservableSubscriptionEventStream = ObservableEventStream < Future < GraphQLResult > >
30-
31- extension Observable {
32- // Convenience method for wrapping Observables in EventStreams
33- public func toEventStream( ) -> ObservableEventStream < Element > {
34- return ObservableEventStream ( self )
35- }
36- }
37-
38-
39- // TODO: Delete notes below
40-
41- // Protocol attempts
42-
43- //protocol EventStreamP {
44- // associatedtype Element
45- // func transform<To>(_ closure: @escaping (Element) throws -> To) -> EventStreamP // How to specify that returned associated type is 'To'
46- //}
47- //extension Observable: EventStreamP {
48- // func transform<To>(_ closure: @escaping (Element) throws -> To) -> EventStreamP {
49- // return self.map(closure)
50- // }
51- //}
52-
53- // Try defining element in closure return
54- //protocol EventStreamP {
55- // associatedtype Element
56- // func transform<ResultStream: EventStreamP>(_ closure: @escaping (Element) throws -> ResultStream.Element) -> ResultStream
57- //}
58- //extension Observable: EventStreamP {
59- // func transform<ResultStream: EventStreamP>(_ closure: @escaping (Element) throws -> ResultStream.Element) -> ResultStream {
60- // return self.map(closure) // Observable<ResultStream.Element> isn't recognized as a ResultStream
61- // }
62- //}
63-
64- // Try absorbing generic type into function
65- //protocol EventStreamP {
66- // func transform<From, To>(_ closure: @escaping (From) throws -> To) -> EventStreamP
67- //}
68- //extension Observable: EventStreamP {
69- // func transform<From, To>(_ closure: @escaping (From) throws -> To) -> EventStreamP {
70- // return self.map(closure) // Doesn't recognize that Observable.Element is the same as From
71- // }
72- //}
73-
74- // Try opaque types
75- //protocol EventStreamP {
76- // associatedtype Element
77- // func transform<To>(_ closure: @escaping (Element) throws -> To) -> some EventStreamP
78- //}
79- //extension Observable: EventStreamP {
80- // func transform<To>(_ closure: @escaping (Element) throws -> To) -> some EventStreamP {
81- // return self.map(closure)
82- // }
83- //}
0 commit comments