export declare enum State {
    empty = "empty",
    receiver = "receiver",
    data = "data",
    close = "close"
}
export declare enum TryReceivedKind {
    value = "value",
    notReceived = "no",
    close = "close"
}
export declare type TryReceived<T> = {
    kind: TryReceivedKind.value;
    value: T;
} | {
    kind: TryReceivedKind.notReceived;
} | {
    kind: TryReceivedKind.close;
};
export declare class SimpleChannel<T> {
    private receivers;
    private data;
    private _state;
    get state(): State;
    constructor();
    tryReceive(): TryReceived<T>;
    receive(): Promise<T>;
    send(data: T): void;
    close(): void;
    [Symbol.asyncIterator](): AsyncIterableIterator<T>;
}
export interface SimpleReceiver<T> {
    receive: () => Promise<T>;
    tryReceive(): TryReceived<T>;
    [Symbol.asyncIterator]: () => AsyncIterableIterator<T>;
}
export declare class MultiReceiverChannel<T> {
    private chan;
    constructor();
    send(data: T): void;
    close(): void;
    receiver(): SimpleReceiver<T>;
    removeReceiver(chan: SimpleReceiver<T>): void;
}
