import { type Functions } from './Functions';
export type Success<T> = Result<T, never>;
export type Failure<E> = Result<never, E>;
export type SuccessData<T> = {
    data: T;
};
export type FailureData<E> = {
    error: E;
};
export type ResultData<T, E = unknown> = SuccessData<T> | FailureData<E>;
export declare namespace Success {
    function isSuccessData<T>(result: SuccessData<T> | FailureData<unknown>): result is SuccessData<T>;
}
export declare namespace Failure {
    function isFailureData<E>(result: SuccessData<unknown> | FailureData<E>): result is FailureData<E>;
}
export declare class Result<T, E = unknown> implements SuccessData<T>, FailureData<E> {
    readonly _data: T;
    readonly _error: E;
    private constructor();
    private constructor();
    static success(): Success<void>;
    static success<T = void>(data: T): Success<T>;
    static failure<E>(error: E): Failure<E>;
    static from<T, E>(serializable: SuccessData<T> | FailureData<E>): Result<T, E>;
    isSuccess(): this is Success<T>;
    isFailure(): this is Failure<E>;
    get data(): T;
    get error(): E;
    map<U>(f: Functions.MapFunction<T, U>): Result<U, E>;
    flatMap<T2, E2>(f: Functions.MapFunction<T, Result<T2, E2>>): Result<T2, E | E2>;
    toJSON(): SuccessData<T> | FailureData<E>;
    toString(): string;
    static groupResults<T, E>(results: Result<T, E>[]): {
        successes: Success<T>[];
        failures: Failure<E>[];
    };
}
