Skip to content

Commit bd78b80

Browse files
feat: introduce resultToObservable (#195)
1 parent 744a69c commit bd78b80

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

src/result/pubcli_api.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { Result, fail, ok, result, resultToPromise } from './public_api'
1+
import { Result, fail, ok, result, resultToPromise, resultToObservable } from './public_api'
22

33
describe('result api', () => {
44
it('should export', () => {
55
expect(fail(Error('Test'))).toBeInstanceOf(Result)
66
expect(ok(1)).toBeInstanceOf(Result)
77
expect(result(() => true, 1, Error('Test'))).toBeInstanceOf(Result)
88
expect(typeof resultToPromise).toEqual('function')
9+
expect(typeof resultToObservable).toEqual('function')
910
})
1011
})

src/result/public_api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export * from './result.interface'
44
export * from './transformers/result-to-promise'
55
export * from './transformers/try-catch-to-result'
66
export * from './transformers/unwrap-result'
7+
export * from './transformers/result-to-observable'
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { fail, ok } from '../result.factory'
2+
import { resultToObservable } from './result-to-observable'
3+
4+
describe(resultToObservable.name, () => {
5+
it('should be ok', done => {
6+
const result = ok<string, Error>('hello')
7+
const sut = resultToObservable(result)
8+
9+
sut
10+
.subscribe({
11+
next: v => {
12+
expect(v).toEqual('hello')
13+
done()
14+
},
15+
error: done
16+
})
17+
})
18+
19+
it('should be ok', done => {
20+
const result = fail<string, Error>(new Error('I failed, sorry.'))
21+
const sut = resultToObservable(result)
22+
23+
sut
24+
.subscribe({
25+
error: (v: Error) => {
26+
expect(v.message).toEqual('I failed, sorry.')
27+
done()
28+
},
29+
next: done
30+
})
31+
})
32+
})
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Observable, of, throwError } from 'rxjs'
2+
import { IResult } from '../result.interface'
3+
4+
export function resultToObservable<TOk, TFail>(result: IResult<TOk, TFail>): Observable<TOk> {
5+
if (result.isOk()) {
6+
return of(result.unwrap())
7+
} else {
8+
return throwError(() => result.unwrapFail())
9+
}
10+
}

0 commit comments

Comments
 (0)