@@ -66,3 +66,70 @@ extension Observable {
66
66
return { ( a: A , b: B , c: C , d: D , e: E , f: F , g: G , h: H , i: I , j: J ) in Observable . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ( g) ( h) ( i) ( j) ) }
67
67
}
68
68
}
69
+
70
+ public enum FromAsyncError : Error {
71
+ /// Both result & error can't be nil
72
+ case inconsistentCompletionResult
73
+ }
74
+
75
+ public extension PrimitiveSequenceType where TraitType == SingleTrait {
76
+ /**
77
+ Transforms an async function that returns data or error through a completionHandler in a function that returns data through a Single
78
+ - The returned function will thake the same arguments than asyncRequest, minus the last one
79
+ */
80
+ static func fromAsync< Er: Error > ( _ asyncRequest: @escaping ( @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> Single < ElementType > {
81
+ return . create { single in
82
+ asyncRequest { result, error in
83
+ switch ( result, error) {
84
+ case let ( . some( result) , nil ) :
85
+ single ( . success( result) )
86
+ case let ( nil , . some( error) ) :
87
+ single ( . error( error) )
88
+ default :
89
+ single ( . error( FromAsyncError . inconsistentCompletionResult) )
90
+ }
91
+ }
92
+ return Disposables . create ( )
93
+ }
94
+ }
95
+
96
+ static func fromAsync< A, Er: Error > ( _ asyncRequest: @escaping ( A , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A ) -> Single < ElementType > {
97
+ return { ( a: A ) in Single . fromAsync ( curry ( asyncRequest) ( a) ) }
98
+ }
99
+
100
+ static func fromAsync< A, B, Er: Error > ( _ asyncRequest: @escaping ( A , B , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B ) -> Single < ElementType > {
101
+ return { ( a: A , b: B ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ) }
102
+ }
103
+
104
+ static func fromAsync< A, B, C, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C ) -> Single < ElementType > {
105
+ return { ( a: A , b: B , c: C ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ) }
106
+ }
107
+
108
+ static func fromAsync< A, B, C, D, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D ) -> Single < ElementType > {
109
+ return { ( a: A , b: B , c: C , d: D ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ) }
110
+ }
111
+
112
+ static func fromAsync< A, B, C, D, E, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E ) -> Single < ElementType > {
113
+ return { ( a: A , b: B , c: C , d: D , e: E ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ) }
114
+ }
115
+
116
+ static func fromAsync< A, B, C, D, E, F, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , F , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E , F ) -> Single < ElementType > {
117
+ return { ( a: A , b: B , c: C , d: D , e: E , f: F ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ) }
118
+ }
119
+
120
+ static func fromAsync< A, B, C, D, E, F, G, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , F , G , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E , F , G ) -> Single < ElementType > {
121
+ return { ( a: A , b: B , c: C , d: D , e: E , f: F , g: G ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ( g) ) }
122
+ }
123
+
124
+ static func fromAsync< A, B, C, D, E, F, G, H, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , F , G , H , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E , F , G , H ) -> Single < ElementType > {
125
+ return { ( a: A , b: B , c: C , d: D , e: E , f: F , g: G , h: H ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ( g) ( h) ) }
126
+ }
127
+
128
+ static func fromAsync< A, B, C, D, E, F, G, H, I, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , F , G , H , I , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E , F , G , H , I ) -> Single < ElementType > {
129
+ return { ( a: A , b: B , c: C , d: D , e: E , f: F , g: G , h: H , i: I ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ( g) ( h) ( i) ) }
130
+ }
131
+
132
+ static func fromAsync< A, B, C, D, E, F, G, H, I, J, Er: Error > ( _ asyncRequest: @escaping ( A , B , C , D , E , F , G , H , I , J , @escaping ( ElementType ? , Er ? ) -> Void ) -> Void ) -> ( A , B , C , D , E , F , G , H , I , J ) -> Single < ElementType > {
133
+ return { ( a: A , b: B , c: C , d: D , e: E , f: F , g: G , h: H , i: I , j: J ) in Single . fromAsync ( curry ( asyncRequest) ( a) ( b) ( c) ( d) ( e) ( f) ( g) ( h) ( i) ( j) ) }
134
+ }
135
+ }
0 commit comments