Skip to content

Commit a0811be

Browse files
authored
Merge pull request #42 from fggeraissate/use-native-result
Replace current Result for the native swift implementation
2 parents f1a9b4c + 8815eaa commit a0811be

File tree

10 files changed

+43
-134
lines changed

10 files changed

+43
-134
lines changed

.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Playground.playground/Contents.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Promise({
1515
return "String"
1616
}).always({ result in
1717
print("Always")
18-
print(result.value ?? "")
18+
print(try? result.get() ?? "")
1919
}).done({ value in
2020
print(value)
2121
}).fail({ error in

Sources/Functions.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ let barrierQueue = DispatchQueue(label: "When.BarrierQueue", attributes: [])
77

88
public func when<T, U>(_ p1: Promise<T>, _ p2: Promise<U>) -> Promise<(T, U)> {
99
return when([p1.asVoid(on: instantQueue), p2.asVoid(on: instantQueue)]).then(on: instantQueue) { _ in
10-
(p1.state.result!.value!, p2.state.result!.value!)
10+
(try! p1.state.result!.get(), try! p2.state.result!.get())
1111
}
1212
}
1313

1414
public func when<T, U, V>(_ p1: Promise<T>, _ p2: Promise<U>, _ p3: Promise<V>) -> Promise<(T, U, V)> {
1515
return when([p1.asVoid(on: instantQueue), p2.asVoid(on: instantQueue), p3.asVoid(on: instantQueue)])
1616
.then(on: instantQueue, ({ _ in
17-
(p1.state.result!.value!, p2.state.result!.value!, p3.state.result!.value!)
17+
(try! p1.state.result!.get(), try! p2.state.result!.get(), try! p3.state.result!.get())
1818
}))
1919
}
2020

@@ -31,7 +31,7 @@ public func when<T>(_ promises: [Promise<T>]) -> Promise<[T]> {
3131
barrierQueue.sync {
3232
resolved += 1
3333
if resolved == total {
34-
masterPromise.resolve(promises.map{ $0.state.result!.value! })
34+
masterPromise.resolve(promises.map{ try! $0.state.result!.get() })
3535
}
3636
}
3737
})

Sources/Observer.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ import Dispatch
33

44
struct Observer<T> {
55
let queue: DispatchQueue
6-
let notify: (Result<T>) -> Void
6+
let notify: (Result<T, Error>) -> Void
77
}

Sources/Promise.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Dispatch
44
open class Promise<T> {
55
public typealias DoneHandler = (T) -> Void
66
public typealias FailureHandler = (Error) -> Void
7-
public typealias CompletionHandler = (Result<T>) -> Void
7+
public typealias CompletionHandler = (Result<T, Error>) -> Void
88

99
public let key = UUID().uuidString
1010
let queue: DispatchQueue
@@ -144,7 +144,7 @@ open class Promise<T> {
144144
}
145145
}
146146

147-
private func notify(_ result: Result<T>) {
147+
private func notify(_ result: Result<T, Error>) {
148148
switch result {
149149
case let .success(value):
150150
for doneHandler in doneHandlers {

Sources/Result.swift

-39
This file was deleted.

Sources/State.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ public enum State<T>: Equatable {
3434
}
3535
}
3636

37-
public var result: Result<T>? {
37+
public var result: Result<T, Error>? {
3838
switch self {
3939
case let .resolved(value):
40-
return .success(value: value)
40+
return .success(value)
4141
case let .rejected(error):
42-
return .failure(error: error)
42+
return .failure(error)
4343
case .pending:
4444
return nil
4545
}

WhenTests/Shared/PromiseSpec.swift

+19-12
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class PromiseSpec: QuickSpec {
4444

4545
it("sets values") {
4646
expect(promise.state).to(equal(state))
47-
expect(promise.state.result?.value).to(equal(state.result?.value))
47+
expect(try! promise.state.result?.get()).to(equal(try! state.result?.get()))
4848
expect(promise.queue === queue).to(beTrue())
4949
}
5050
}
@@ -64,8 +64,11 @@ class PromiseSpec: QuickSpec {
6464
promise
6565
.fail({ object in
6666
expect(promise.state.isRejected).to(beTrue())
67-
expect(promise.state.result?.value).to(beNil())
68-
expect(promise.state.result?.error is SpecError).to(beTrue())
67+
guard case .failure(let error) = promise.state.result else {
68+
fail()
69+
return
70+
}
71+
expect(error is SpecError).to(beTrue())
6972

7073
failExpectation.fulfill()
7174
})
@@ -89,8 +92,7 @@ class PromiseSpec: QuickSpec {
8992
promise
9093
.done({ object in
9194
expect(promise.state.isResolved).to(beTrue())
92-
expect(promise.state.result?.value).to(equal(string))
93-
expect(promise.state.result?.error).to(beNil())
95+
expect(try! promise.state.result?.get()).to(equal(string))
9496

9597
doneExpectation.fulfill()
9698
})
@@ -118,8 +120,7 @@ class PromiseSpec: QuickSpec {
118120
promise.done { value in
119121
expect(value).to(equal(string))
120122
expect(promise.state.isResolved).to(beTrue())
121-
expect(promise.state.result?.value).to(equal(string))
122-
expect(promise.state.result?.error).to(beNil())
123+
expect(try! promise.state.result?.get()).to(equal(string))
123124

124125
doneExpectation.fulfill()
125126
}
@@ -143,8 +144,11 @@ class PromiseSpec: QuickSpec {
143144
.fail({ error in
144145
expect(error is SpecError).to(beTrue())
145146
expect(promise.state.isRejected).to(beTrue())
146-
expect(promise.state.result?.value).to(beNil())
147-
expect(promise.state.result?.error is SpecError).to(beTrue())
147+
guard case .failure(let promiseError) = promise.state.result else {
148+
fail()
149+
return
150+
}
151+
expect(promiseError is SpecError).to(beTrue())
148152

149153
failExpectation.fulfill()
150154
})
@@ -179,8 +183,7 @@ class PromiseSpec: QuickSpec {
179183
.done({ object in
180184
expect(object).to(equal(string))
181185
expect(promise.state.isResolved).to(beTrue())
182-
expect(promise.state.result?.value).to(equal(string))
183-
expect(promise.state.result?.error).to(beNil())
186+
expect(try! promise.state.result?.get()).to(equal(string))
184187

185188
doneExpectation.fulfill()
186189
})
@@ -259,7 +262,11 @@ class PromiseSpec: QuickSpec {
259262
fail("Handler should not be called")
260263
})
261264
.always({ result in
262-
expect((result.error as? PromiseError) == .cancelled).to(beTrue())
265+
guard case .failure(let error) = result else {
266+
fail()
267+
return
268+
}
269+
expect((error as? PromiseError) == .cancelled).to(beTrue())
263270
failExpectation.fulfill()
264271
})
265272

WhenTests/Shared/ResultSpec.swift

-70
This file was deleted.

WhenTests/Shared/StateSpec.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class StateSpec: QuickSpec {
7676
expect(nextState.isPending).to(beFalse())
7777
expect(nextState.isResolved).to(beTrue())
7878
expect(nextState.isRejected).to(beFalse())
79-
expect(nextState.result?.value).to(equal(11))
79+
expect(try! nextState.result?.get()).to(equal(11))
8080
}
8181
}
8282
}
@@ -109,12 +109,16 @@ class StateSpec: QuickSpec {
109109
let nextState: State<Int> = state.map { value in
110110
return 11
111111
}
112+
113+
guard case .failure(let error) = nextState.result else {
114+
fail()
115+
return
116+
}
112117

113118
expect(nextState.isPending).to(beFalse())
114119
expect(nextState.isResolved).to(beFalse())
115120
expect(nextState.isRejected).to(beTrue())
116-
expect(nextState.result?.value).to(beNil())
117-
expect(nextState.result?.error is SpecError).to(beTrue())
121+
expect(error is SpecError).to(beTrue())
118122
}
119123
}
120124
}

0 commit comments

Comments
 (0)