DoxigAlpha

elidingSendFile

Function parameters

Parameters

#
w:*Writer
file_reader:*File.Reader
limit:std.Io.Limit

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 elidingSendFile(w: *Writer, file_reader: *File.Reader, limit: std.Io.Limit) Writer.FileError!usize {
    const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w));
    if (File.Handle == void) return error.Unimplemented;
    if (builtin.zig_backend == .stage2_aarch64) return error.Unimplemented;
    switch (bw.state) {
        .content_length => |*len| len.* -= w.end,
        else => {},
    }
    w.end = 0;
    if (limit == .nothing) return 0;
    if (file_reader.getSize()) |size| {
        const n = limit.minInt64(size - file_reader.pos);
        if (n == 0) return error.EndOfStream;
        file_reader.seekBy(@intCast(n)) catch return error.Unimplemented;
        switch (bw.state) {
            .content_length => |*len| len.* -= n,
            else => {},
        }
        return n;
    } else |_| {
        // Error is observable on `file_reader` instance, and it is better to
        // treat the file as a pipe.
        return error.Unimplemented;
    }
}