import Future from './Future'; declare const symbol: unique symbol; export declare abstract class Result { abstract is_ok(): this is OkResult; abstract is_err(): this is ErrResult; abstract unwrap(): T; abstract into(): T | E; abstract map( ok: (value: T) => Ook, err?: (error: E) => Oerr ): Result; abstract map_async( ok: (value: T) => Ook | PromiseLike, err?: (error: E) => Oerr | PromiseLike ): FutureResult; abstract map_err(err: (error: E) => Oerr): Result; abstract map_err_async( err: (error: E) => Oerr | PromiseLike ): FutureResult; abstract toJSON(): | { ok: T; } | { error: E; }; protected abstract [symbol]: T | E; static unwrap(result: T | Result): T; static from(value: T | Result): Result; static try(cb: () => T): Result; abstract or(value: A): T | A; abstract or_else(err: (error: E) => A): T | A; abstract or_else_async( err: (error: E) => A | PromiseLike ): Future; abstract map_or(ok: (value: T) => Ook, value: A): Ook | A; abstract map_or_else( ok: (value: T) => Ook, err: (error: E) => A ): Ook | A; map_or_async( ok: (value: T) => Ook | PromiseLike, value: A | PromiseLike ): Future; map_or_else_async( ok: (value: T) => Ook | PromiseLike, err: (error: E) => A | PromiseLike ): Future; } export declare class OkResult extends Result { protected [symbol]: T; constructor(value: T); is_ok(): this is OkResult; is_err(): this is ErrResult; unwrap(): T; into(): T; map( ok: (value: T) => Ook, _err?: (error: E) => Oerr ): OkResult; map_async( ok: (value: T) => Ook | PromiseLike, _err?: (error: E) => Oerr | PromiseLike ): FutureResult; map_err(_err: (error: E) => Oerr): OkResult; map_err_async( _err: (error: E) => Oerr | PromiseLike ): FutureResult; toJSON(): { ok: T; }; or(): T; or_else(): T; or_else_async(): Future; map_or(ok: (value: T) => Ook): Ook | A; map_or_else(ok: (value: T) => Ook): Ook | A; } export declare class ErrResult extends Result< T, E > { protected [symbol]: E; constructor(error: E); is_ok(): this is OkResult; is_err(): this is ErrResult; unwrap(): never; into(): E; map( _ok: (value: T) => Ook, err?: (error: E) => Oerr ): Result; map_async( _ok: (value: T) => Ook | PromiseLike, err?: (error: E) => Oerr | PromiseLike ): FutureResult; map_err(err: (error: E) => Oerr): Result; map_err_async( err: (error: E) => Oerr | PromiseLike ): FutureResult; toJSON(): { error: E; }; or(value: A): A; or_else(err: (error: E) => A): A; or_else_async(err: (error: E) => A | PromiseLike): Future; map_or(_ok: (value: T) => Ook, value: A): Ook | A; map_or_else(_ok: (value: T) => Ook, err: (error: E) => A): Ook | A; } export declare class FutureResult extends Future> { constructor(resolver: () => T | PromiseLike); map_async( ok: (value: T) => Ook | PromiseLike, err?: (error: E) => Oerr | PromiseLike ): FutureResult; map_err_async( err: (error: E) => Oerr | PromiseLike ): FutureResult; unwrap(): Future; or(value: A | PromiseLike): Future; or_else(err: (error: E) => A): Future; or_else_async(err: (error: E) => A | PromiseLike): Future; map_or( ok: (value: T) => Ook, value: A | PromiseLike ): Future; map_or_else( ok: (value: T) => Ook, err: (error: E) => A ): Future; map_or_async( ok: (value: T) => Ook | PromiseLike, value: A | PromiseLike ): Future; map_or_else_async( ok: (value: T) => Ook | PromiseLike, err: (error: E) => A | PromiseLike ): Future; } export type OkFactory = (value: T) => OkResult; export type ErrFactory = (error: E) => ErrResult; export declare const Ok: typeof OkResult & OkFactory & (() => OkResult); export declare const Err: typeof ErrResult & ErrFactory & (() => ErrResult); export default Result;