import type {GenericCallback} from '../models'; // #region Types /** * An unknown result */ export type AnyResult = Err | ExtendedErr | Ok; /** * An error result */ export type Err = { ok: false; error: Error; }; /** * An extended error result */ export type ExtendedErr = Err & { original: Error; }; /** * An extended, unknown result */ export type ExtendedResult = ExtendedErr | Ok; /** * A successful result */ export type Ok = { ok: true; value: Value; }; /** * An unknown result */ export type Result = Err | Ok; /** * Match callbacks for a result */ export type ResultMatch = { /** * Callback for error result * * @param error Error value * @param original Original error, if available * @returns Value to return */ error: (error: E, original?: Error) => Returned; /** * Callback for ok result * * @param value Ok value * @returns Value to return */ ok: (value: Value) => Returned; }; /** * Unwrap a result value */ type UnwrapResult> = Original extends Ok ? Value : never; /** * Unwrap any value */ export type UnwrapValue = Original extends GenericCallback ? ReturnType extends Result ? UnwrapResult> : ReturnType : Original extends Result ? UnwrapResult : Original extends Promise ? Awaited : Original; // #endregion