UNPKG

@utx/result

Version:

A typescript implementation of Rust's Result and Option objects.

125 lines (121 loc) 3.46 kB
/** * @utx/result v3.4.0 * Author: Gabe M <hey@gabe.mx> * LICENSE: ISC * * https://github.com/fromgmworks/typescript-result */ import { of } from 'rxjs'; import { map, switchMap, mergeMap, filter, tap } from 'rxjs/operators/index.js'; import { Result, Ok } from '../result.mjs'; function resultMap(mapper) { return function (source) { return source.pipe(map(function (result) { return result.map(mapper); })); }; } function resultMapErr(mapper) { return function (source) { return source.pipe(map(function (result) { return result.mapErr(mapper); })); }; } function resultMapTo(value) { return function (source) { return source.pipe(map(function (result) { return result.map(function () { return value; }); })); }; } function resultMapErrTo(value) { return function (source) { return source.pipe(map(function (result) { return result.mapErr(function () { return value; }); })); }; } function elseMap(mapper) { return function (source) { return source.pipe(map(function (result) { if (result.err) { return mapper(result.val); } else { return result.val; } })); }; } function elseMapTo(value) { return function (source) { return source.pipe(map(function (result) { if (result.err) { return value; } else { return result.val; } })); }; } function resultSwitchMap(mapper) { return function (source) { return source.pipe(switchMap(function (result) { if (result.ok) { return mapper(result.val); } else { return of(result); } }), map(function (result) { if (Result.isResult(result)) { return result; } else { return new Ok(result); } })); }; } function resultMergeMap(mapper) { return function (source) { return source.pipe(mergeMap(function (result) { if (result.ok) { return mapper(result.val); } else { return of(result); } }), map(function (result) { if (Result.isResult(result)) { return result; } else { return new Ok(result); } })); }; } function filterResultOk() { return function (source) { return source.pipe(filter(function (result) { return result.ok; }), map(function (result) { return result.val; })); }; } function filterResultErr() { return function (source) { return source.pipe(filter(function (result) { return result.err; }), map(function (result) { return result.val; })); }; } function tapResultErr(tapFn) { return function (source) { return source.pipe(tap(function (r) { if (!r.ok) { tapFn(r.val); } })); }; } function tapResultOk(tapFn) { return function (source) { return source.pipe(tap(function (r) { if (r.ok) { tapFn(r.val); } })); }; } export { elseMap, elseMapTo, filterResultErr, filterResultOk, resultMap, resultMapErr, resultMapErrTo, resultMapTo, resultMergeMap, resultSwitchMap, tapResultErr, tapResultOk };