import type { Charset } from "@effect/core/stream/Stream/operations/_internal/Charset" import { concreteStream, StreamInternal } from "@effect/core/stream/Stream/operations/_internal/StreamInternal" import { stringChunkFrom } from "@effect/core/stream/Stream/operations/_internal/stringChunkFrom" export function textDecodeUsing(charset: Charset) { return (stream: Stream): Stream => { concreteStream(stream) return new StreamInternal( Channel.suspend(stream.channel >> transform(charset)) ) } } function transform( charset: Charset ): Channel, unknown, E, Chunk, unknown> { return Channel.readWith( (received: Chunk) => received.isEmpty ? transform(charset) : Channel.write(stringChunkFrom(received, charset)), (err) => Channel.fail(err), () => Channel.unit ) }