// author: simon-pierre boucher import type { TendrilError } from "./errors.js"; export type Ok = { readonly ok: true; readonly value: T }; export type Err = { readonly ok: false; readonly error: E }; export type Result = Ok | Err; export function ok(value: T): Ok { return { ok: true, value }; } export function err(error: E): Err { return { ok: false, error }; } export function isOk(r: Result): r is Ok { return r.ok; } export function isErr(r: Result): r is Err { return !r.ok; } export function map(r: Result, f: (value: T) => U): Result { return r.ok ? ok(f(r.value)) : r; } export function mapErr(r: Result, f: (error: E) => F): Result { return r.ok ? r : err(f(r.error)); } export function unwrapOr(r: Result, fallback: T): T { return r.ok ? r.value : fallback; }