Module Awskit_s3_eio.Body

include Awskit_s3.BODY with type 'a io := 'a and type t = Runtime.request_body

Runtime request body descriptor.

Values may be replayable, such as in-memory or file-backed bodies, or one-shot, such as bodies backed by a caller-owned stream.

type writer

Scoped writer passed to streaming body callbacks.

The writer is valid only while the callback supplied to of_stream is running. Do not store it or use it after the callback returns.

val empty : t

Empty replayable body with content length 0.

val of_string : string -> t

Build a replayable in-memory body from a string.

val of_bytes : bytes -> t

Build a replayable in-memory body from bytes.

val of_stream : content_length:int64 -> replayable:bool -> write:(writer -> (unit, Awskit.Error.t) Stdlib.result) -> (t, Awskit.Error.t) Stdlib.result

Build a streaming request body with a known content_length.

replayable must be true only when retrying the request can recreate the same bytes by invoking write again. Negative content lengths are rejected before a request is sent. The supplied writer is scoped to one invocation of write.

val content_length : t -> int64 option

Return the known content length for the body, when available.

val replayable : t -> bool

Return whether the body can be safely written again for retries.

module Writer : sig ... end
val of_flow : content_length:int64 -> ?on_progress:(int64 -> unit) -> 'flow Eio.Flow.source -> (t, Awskit_s3.Error.t) Stdlib.result

Build a non-replayable request body from an existing Eio source flow. content_length must match the produced bytes, and the flow must remain valid until the request finishes. The caller owns and closes the flow.

val of_path : ?on_progress:(int64 -> unit) -> _ Eio.Path.t -> (t, Awskit_s3.Error.t) Stdlib.result

Build a replayable request body from a regular file path. The file is reopened for each request attempt.