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/ › compress/ › zstd/ › Decompress.zig › stream
stream
Decompress.stream
fn stream (d : *Decompress , w : *Writer , limit : Limit ) Reader .StreamError !usize
File
Code
fn stream (d : *Decompress , w : *Writer , limit : Limit ) Reader .StreamError !usize {
const in = d .input ;
state : switch (d .state ) {
.new_frame => {
// frame magic. Any partial magic bytes should be considered a failure.
in .fill (@sizeOf (Frame .Magic )) catch |err | switch (err ) {
error .EndOfStream => {
if (in .bufferedLen () != 0 ) {
d .err = error .BadMagic ;
return error .ReadFailed ;
}
return err ;
},
else => |e | return e ,
};
const magic = try in .takeEnumNonexhaustive (Frame .Magic , .little );
initFrame (d , magic ) catch |err | {
d .err = err ;
return error .ReadFailed ;
};
continue :state d .state ;
},
.in_frame => |*in_frame | {
return readInFrame (d , w , limit , in_frame ) catch |err | switch (err ) {
error .ReadFailed , error .WriteFailed => |e | return e ,
else => |e | {
d .err = e ;
return error .ReadFailed ;
},
};
},
.skipping_frame => |*remaining | {
const n = in .discard (.limited (remaining .*)) catch |err | {
d .err = err ;
return error .ReadFailed ;
};
remaining .* -= n ;
if (remaining .* == 0 ) d .state = .new_frame ;
return 0 ;
},
}
}