Documentation

Std.Http.Data.Body.Stream

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.

Instances For

    Creates a rendezvous body stream.

    Equations
    • One or more equations did not get rendered due to their size.
    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.

      Equations
      • One or more equations did not get rendered due to their size.
      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).

        Equations
        • One or more equations did not get rendered due to their size.
        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.

          Equations
          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.

            Equations
            • One or more equations did not get rendered due to their size.
            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.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[inline]

                Checks whether the channel is closed.

                Equations
                Instances For
                  @[inline]

                  Gets the known size if available.

                  Equations
                  Instances For
                    @[inline]

                    Sets known size metadata.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Creates a selector that resolves when a producer is waiting (or the channel closes).

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        @[inline]
                        def Std.Http.Body.Stream.forIn {β : Type} (stream : Stream) (acc : β) (step : ChunkβAsync.Async (ForInStep β)) :

                        Iterates over chunks until the channel closes.

                        Equations
                        Instances For
                          @[inline]
                          def Std.Http.Body.Stream.forIn' {β : Type} (stream : Stream) (acc : β) (step : ChunkβAsync.ContextAsync (ForInStep β)) :

                          Context-aware iteration over chunks until the channel closes.

                          Equations
                          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).

                            • nextChunk : Streamm (Option Chunk)

                              Receives the next chunk, stopping at EOF or (in ContextAsync) when the context is cancelled.

                            Instances
                              @[instance_reducible]
                              Equations
                              • One or more equations did not get rendered due to their size.
                              def Std.Http.Body.Stream.readAll {α : Type} {m : TypeType} [FromByteArray α] [Monad m] [MonadExceptOf IO.Error m] [NextChunk m] (stream : Stream) (maximumSize : Option UInt64 := none) :
                              m α

                              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).

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                def Std.Http.Body.Stream.drain {m : TypeType} [Monad m] [NextChunk m] (stream : Stream) (drainLimit : Option UInt64 := none) (closeStream : m Unit := pure ()) :

                                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).

                                Equations
                                Instances For
                                  def Std.Http.Body.Stream.send (stream : Stream) (chunk : Chunk) (incomplete : Bool := false) :

                                  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.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For

                                    Returns true when a consumer is currently blocked waiting for data.

                                    Equations
                                    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.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      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.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For

                                          Creates a body from a fixed byte array.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            Creates an empty Stream body channel (already closed, no data).

                                            Prefer Body.Empty when you need a concrete zero-cost type. Use this when the calling context requires a Stream specifically.

                                            Equations
                                            Instances For
                                              @[instance_reducible]
                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              @[instance_reducible]
                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              @[instance_reducible]
                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              @[instance_reducible]
                                              Equations
                                              • One or more equations did not get rendered due to their size.

                                              Builds a request with a streaming body generator.

                                              Equations
                                              Instances For

                                                Builds a response with a streaming body generator.

                                                Equations
                                                Instances For