Body.Stream #
This module defines a zero-buffer rendezvous body channel (Body.Stream) that supports
both sending and receiving chunks.
There is no queue and no capacity. A send waits for a receiver and a receive waits for a sender. At most one blocked producer and one blocked consumer are supported.
A zero-buffer rendezvous body channel that supports both sending and receiving chunks.
- state : Std.Mutex Channel.State
Instances For
Attempts to receive a chunk from the channel without blocking.
Returns some chunk only when a producer is already waiting. If the stream has been closed with a
terminal error, throws that error instead of returning none.
Instances For
Non-blocking receive for the Body typeclass. Returns none when no producer is
waiting and the channel is still open, some (some chunk) when data is ready,
or some none at end-of-stream (channel closed with no pending producer).
Instances For
Receives a chunk from the channel. Blocks until a producer sends one. Returns none if the channel
is closed and no producer is waiting. If the channel was closed with a terminal error
(via closeWithError) after all buffered chunks have been consumed, that error is thrown instead of EOF.
Instances For
Closes the channel.
Instances For
Closes the channel only if no consumer is currently registered (i.e., the stream
was abandoned without being read). If a consumer is waiting, the close is skipped
so the pending recv can still receive data. Returns true if the stream was closed.
Instances For
Closes the channel and records err as a terminal error. A subsequent recv that would have
returned end-of-stream surfaces the error instead; already buffered chunks are still delivered first.
This function does not overwrite an existing error.
Instances For
Checks whether the channel is closed.
Instances For
Gets the known size if available.
Instances For
Sets known size metadata.
Instances For
Creates a selector that resolves when a producer is waiting (or the channel closes).
Instances For
Iterates over chunks until the channel closes.
Instances For
Context-aware iteration over chunks until the channel closes.
Instances For
Abstracts over how the next chunk is received, allowing readAll to work in both Async
(no cancellation) and ContextAsync (races with cancellation via doneSelector).
Receives the next chunk, stopping at EOF or (in
ContextAsync) when the context is cancelled.
Instances
Reads all remaining chunks and decodes them into α.
Works in both Async (reads until EOF, no cancellation) and ContextAsync (also stops if the
context is cancelled).
Instances For
Drains all remaining chunks from the stream, discarding their contents.
If drainLimit is given, at most that many bytes are consumed; when the limit is exceeded the
stream is closed (via closeStream) and no error is raised.
Works in both Async (reads until EOF, no cancellation) and ContextAsync (also stops if the
context is cancelled).
Instances For
Sends a chunk.
If incomplete := true, the chunk is buffered and collapsed with subsequent chunks, and is not
delivered to the receiver yet.
If incomplete := false, any buffered incomplete pieces are collapsed with this chunk and the
single merged chunk is sent.
Instances For
Returns true when a consumer is currently blocked waiting for data.
Instances For
Creates a selector that resolves when consumer interest is present.
Returns true when a consumer is waiting, false when the channel closes first.
Instances For
Creates a body from a producer function.
Returns the stream immediately and runs gen in a detached task.
The channel is closed when gen returns. If gen throws, the channel is closed with that terminal
error so consumers observe the failure instead of a clean end-of-stream.
Instances For
Creates a body from a fixed byte array.
Instances For
Builds a request with a streaming body generator.
Instances For
Builds a response with a streaming body generator.