/** * @since 4.0.0 */ import type * as Arr from "./Array.ts" import * as Channel from "./Channel.ts" import * as Effect from "./Effect.ts" import { dual } from "./Function.ts" import * as Schema from "./Schema.ts" /** * @since 4.0.0 * @category constructors */ export const encode = ( schema: S ) => (): Channel.Channel< Arr.NonEmptyReadonlyArray, IE | Schema.SchemaError, Done, Arr.NonEmptyReadonlyArray, IE, Done, S["EncodingServices"] > => { const encode = Schema.encodeEffect(Schema.NonEmptyArray(schema)) return Channel.fromTransform((upstream, _scope) => Effect.succeed(Effect.flatMap(upstream, (chunk) => encode(chunk)))) } /** * @since 4.0.0 * @category constructors */ export const encodeUnknown: ( schema: S ) => () => Channel.Channel< Arr.NonEmptyReadonlyArray, IE | Schema.SchemaError, Done, Arr.NonEmptyReadonlyArray, IE, Done, S["EncodingServices"] > = encode /** * @since 4.0.0 * @category constructors */ export const decode = ( schema: S ) => (): Channel.Channel< Arr.NonEmptyReadonlyArray, IE | Schema.SchemaError, Done, Arr.NonEmptyReadonlyArray, IE, Done, S["DecodingServices"] > => { const decode = Schema.decodeEffect(Schema.NonEmptyArray(schema)) return Channel.fromTransform((upstream, _scope) => Effect.succeed(Effect.flatMap(upstream, (chunk) => decode(chunk)))) } /** * @since 4.0.0 * @category constructors */ export const decodeUnknown: ( schema: S ) => () => Channel.Channel< Arr.NonEmptyReadonlyArray, IE | Schema.SchemaError, Done, Arr.NonEmptyReadonlyArray, IE, Done, S["DecodingServices"] > = decode /** * @since 4.0.0 * @category combinators */ export const duplex: { /** * @since 4.0.0 * @category combinators */ ( options: { readonly inputSchema: In readonly outputSchema: Out } ): ( self: Channel.Channel< Arr.NonEmptyReadonlyArray, OutErr, OutDone, Arr.NonEmptyReadonlyArray, Schema.SchemaError | InErr, InDone, R > ) => Channel.Channel< Arr.NonEmptyReadonlyArray, Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"] > /** * @since 4.0.0 * @category combinators */ ( self: Channel.Channel< Arr.NonEmptyReadonlyArray, OutErr, OutDone, Arr.NonEmptyReadonlyArray, Schema.SchemaError | InErr, InDone, R >, options: { readonly inputSchema: In readonly outputSchema: Out } ): Channel.Channel< Arr.NonEmptyReadonlyArray, Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"] > } = dual(2, ( self: Channel.Channel< Arr.NonEmptyReadonlyArray, OutErr, OutDone, Arr.NonEmptyReadonlyArray, Schema.SchemaError | InErr, InDone, R >, options: { readonly inputSchema: In readonly outputSchema: Out } ): Channel.Channel< Arr.NonEmptyReadonlyArray, Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"] > => encode(options.inputSchema)().pipe( Channel.pipeTo(self), Channel.pipeTo(decode(options.outputSchema)()) )) /** * @since 4.0.0 * @category combinators */ export const duplexUnknown: { /** * @since 4.0.0 * @category combinators */ ( options: { readonly inputSchema: In readonly outputSchema: Out } ): ( self: Channel.Channel< Arr.NonEmptyReadonlyArray, OutErr, OutDone, Arr.NonEmptyReadonlyArray, Schema.SchemaError | InErr, InDone, R > ) => Channel.Channel< Arr.NonEmptyReadonlyArray, Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"] > /** * @since 4.0.0 * @category combinators */ ( self: Channel.Channel< Arr.NonEmptyReadonlyArray, OutErr, OutDone, Arr.NonEmptyReadonlyArray, Schema.SchemaError | InErr, InDone, R >, options: { readonly inputSchema: In readonly outputSchema: Out } ): Channel.Channel< Arr.NonEmptyReadonlyArray, Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"] > } = duplex