DoxigAlpha

bodyReaderDecompressing

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

Asserts only called once and after receiveHead.

See also:

  • interface

Function parameters

Parameters

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

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 bodyReaderDecompressing(
    reader: *Reader,
    transfer_buffer: []u8,
    transfer_encoding: TransferEncoding,
    content_length: ?u64,
    content_encoding: ContentEncoding,
    decompress: *Decompress,
    decompress_buffer: []u8,
) *std.Io.Reader {
    if (transfer_encoding == .none and content_length == null) {
        assert(reader.state == .received_head);
        reader.state = .body_none;
        switch (content_encoding) {
            .identity => {
                return reader.in;
            },
            .deflate => {
                decompress.* = .{ .flate = .init(reader.in, .zlib, decompress_buffer) };
                return &decompress.flate.reader;
            },
            .gzip => {
                decompress.* = .{ .flate = .init(reader.in, .gzip, decompress_buffer) };
                return &decompress.flate.reader;
            },
            .zstd => {
                decompress.* = .{ .zstd = .init(reader.in, decompress_buffer, .{ .verify_checksum = false }) };
                return &decompress.zstd.reader;
            },
            .compress => unreachable,
        }
    }
    const transfer_reader = bodyReader(reader, transfer_buffer, transfer_encoding, content_length);
    return decompress.init(transfer_reader, decompress_buffer, content_encoding);
}