import { BaseError } from "./baseError"; export type Result = | { ok: true; value: T } | { ok: false; error: E }; export const Ok = (data: T): Result => { return { ok: true, value: data }; }; export const Err = (error: E): Result => { return { ok: false, error }; }; export async function wrap( p: Promise, errorFactory: (err: Error, source: string) => E, source: string = "unspecified" ): Promise> { try { return Ok(await p); } catch (e) { return Err(errorFactory(e as Error, source)); } } export function isErr( result: Result, ): result is { ok: false; error: E } { return !result.ok; }