@utx/result
Version:
A typescript implementation of Rust's Result and Option objects.
125 lines (121 loc) • 3.46 kB
JavaScript
/**
* @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 };