Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › Io/ › Writer.zig › Discarding
Discarding
Writer.Discarding
pub const Discarding = struct
File
Code
pub const Discarding = struct {
count : u64 ,
writer : Writer ,
pub fn init (buffer : []u8 ) Discarding {
return .{
.count = 0 ,
.writer = .{
.vtable = &.{
.drain = Discarding .drain ,
.sendFile = Discarding .sendFile ,
},
.buffer = buffer ,
},
};
}
pub fn fullCount (d : *const Discarding ) u64 {
return d .count + d .writer .end ;
}
pub fn drain (w : *Writer , data : []const []const u8 , splat : usize ) Error !usize {
const d : *Discarding = @alignCast (@fieldParentPtr ("writer" , w ));
const slice = data [0 .. data .len - 1 ];
const pattern = data [slice .len ];
var written : usize = pattern .len * splat ;
for (slice ) |bytes | written += bytes .len ;
d .count += w .end + written ;
w .end = 0 ;
return written ;
}
pub fn sendFile (w : *Writer , file_reader : *File .Reader , limit : Limit ) FileError !usize {
if (File .Handle == void ) return error .Unimplemented ;
const d : *Discarding = @alignCast (@fieldParentPtr ("writer" , w ));
d .count += w .end ;
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 ;
w .end = 0 ;
d .count += n ;
return n ;
} else |_ | {
// treat the file as a pipe.
return error .Unimplemented ;
}
}
}