159 lines
3.5 KiB
TypeScript
159 lines
3.5 KiB
TypeScript
/**
|
|
* @since 2.0.0
|
|
*/
|
|
import * as internal from "./internal/channel/childExecutorDecision.js"
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const ChildExecutorDecisionTypeId: unique symbol = internal.ChildExecutorDecisionTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type ChildExecutorDecisionTypeId = typeof ChildExecutorDecisionTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export type ChildExecutorDecision = Continue | Close | Yield
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
*/
|
|
export declare namespace ChildExecutorDecision {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Proto {
|
|
readonly [ChildExecutorDecisionTypeId]: ChildExecutorDecisionTypeId
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Continue executing the current substream
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Continue extends ChildExecutorDecision.Proto {
|
|
readonly _tag: "Continue"
|
|
}
|
|
|
|
/**
|
|
* Close the current substream with a given value and pass execution to the
|
|
* next substream
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Close extends ChildExecutorDecision.Proto {
|
|
readonly _tag: "Close"
|
|
readonly value: unknown
|
|
}
|
|
|
|
/**
|
|
* Pass execution to the next substream. This either pulls a new element
|
|
* from upstream, or yields to an already created active substream.
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Yield extends ChildExecutorDecision.Proto {
|
|
readonly _tag: "Yield"
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const Continue: (_: void) => ChildExecutorDecision = internal.Continue
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const Close: (value: unknown) => ChildExecutorDecision = internal.Close
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const Yield: (_: void) => ChildExecutorDecision = internal.Yield
|
|
|
|
/**
|
|
* Returns `true` if the specified value is a `ChildExecutorDecision`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isChildExecutorDecision: (u: unknown) => u is ChildExecutorDecision = internal.isChildExecutorDecision
|
|
|
|
/**
|
|
* Returns `true` if the specified `ChildExecutorDecision` is a `Continue`,
|
|
* `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isContinue: (self: ChildExecutorDecision) => self is Continue = internal.isContinue
|
|
|
|
/**
|
|
* Returns `true` if the specified `ChildExecutorDecision` is a `Close`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isClose: (self: ChildExecutorDecision) => self is Close = internal.isClose
|
|
|
|
/**
|
|
* Returns `true` if the specified `ChildExecutorDecision` is a `Yield`, `false`
|
|
* otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isYield: (self: ChildExecutorDecision) => self is Yield = internal.isYield
|
|
|
|
/**
|
|
* Folds over a `ChildExecutorDecision` to produce a value of type `A`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
export const match: {
|
|
/**
|
|
* Folds over a `ChildExecutorDecision` to produce a value of type `A`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
<A>(
|
|
options: {
|
|
readonly onContinue: () => A
|
|
readonly onClose: (value: unknown) => A
|
|
readonly onYield: () => A
|
|
}
|
|
): (self: ChildExecutorDecision) => A
|
|
/**
|
|
* Folds over a `ChildExecutorDecision` to produce a value of type `A`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category folding
|
|
*/
|
|
<A>(
|
|
self: ChildExecutorDecision,
|
|
options: {
|
|
readonly onContinue: () => A
|
|
readonly onClose: (value: unknown) => A
|
|
readonly onYield: () => A
|
|
}
|
|
): A
|
|
} = internal.match
|