channel-ts
Version:
Channels implemented in Typescript using async/await
45 lines (44 loc) • 1.08 kB
TypeScript
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;
}