1export type Result<T, E> =
2 | {
3 ok: true;
4 value: T;
5 }
6 | {
7 ok: false;
8 error: E;
9 };
10
11export const ok = <T, E>(value: T): Result<T, E> => {
12 return { ok: true, value };
13};
14export const err = <T, E>(error: E): Result<T, E> => {
15 return { ok: false, error };
16};
17export const expect = <T, E>(v: Result<T, E>, msg: string = 'expected result to not be error:') => {
18 if (v.ok) {
19 return v.value;
20 }
21 throw `${msg} ${v.error}`;
22};
23export const map = <T, E, U>(v: Result<T, E>, fn: (value: T) => U): Result<U, E> => {
24 if (v.ok) {
25 return ok(fn(v.value));
26 }
27 return err(v.error);
28};