DoxigAlpha

bodyReader

If compressed body has been negotiated this will return compressed bytes.

Asserts only called once and after receiveHead.

See also:

  • interfaceDecompressing

Function parameters

Parameters

#
reader:*Reader
transfer_buffer:[]u8
content_length:?u64

Type definitions in this namespace

Types

#
Method
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
Status
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
TransferEncoding
compression is intentionally omitted here since it is handled in `ContentEncoding`.
BodyWriter
Request or response body.

Source

Implementation

#
pub fn bodyReader(
    reader: *Reader,
    transfer_buffer: []u8,
    transfer_encoding: TransferEncoding,
    content_length: ?u64,
) *std.Io.Reader {
    assert(reader.state == .received_head);
    switch (transfer_encoding) {
        .chunked => {
            reader.state = .{ .body_remaining_chunk_len = .head };
            reader.interface = .{
                .buffer = transfer_buffer,
                .seek = 0,
                .end = 0,
                .vtable = &.{
                    .stream = chunkedStream,
                    .discard = chunkedDiscard,
                },
            };
            return &reader.interface;
        },
        .none => {
            if (content_length) |len| {
                reader.state = .{ .body_remaining_content_length = len };
                reader.interface = .{
                    .buffer = transfer_buffer,
                    .seek = 0,
                    .end = 0,
                    .vtable = &.{
                        .stream = contentLengthStream,
                        .discard = contentLengthDiscard,
                    },
                };
                return &reader.interface;
            } else {
                reader.state = .body_none;
                return reader.in;
            }
        },
    }
}