/**
 * A type used for returning and propagating errors. The first element of the union
 * represents success and contains a value, and the second represents an error and
 * contains an error value.
 * @private
 */
export type Result<T, E> = {
    result: 'success';
    value: T;
} | {
    result: 'error';
    value: E;
};

export function success<T, E>(value: T): Result<T, E> {
    return {result: 'success', value};
}

export function error<T, E>(value: E): Result<T, E> {
    return {result: 'error', value};
}
