Function decode [src]
Prototype
pub fn decode(in: *Reader) DecodeError!Header Parameters
in: *Reader Possible Errors
Source
pub fn decode(in: *Reader) DecodeError!Header {
const descriptor: Descriptor = @bitCast(try in.takeByte());
if (descriptor.reserved) return error.ReservedBitSet;
const window_descriptor: ?u8 = if (descriptor.single_segment_flag) null else try in.takeByte();
const dictionary_id: ?u32 = if (descriptor.dictionary_id_flag > 0) d: {
// if flag is 3 then field_size = 4, else field_size = flag
const field_size = (@as(u4, 1) << descriptor.dictionary_id_flag) >> 1;
break :d try in.takeVarInt(u32, .little, field_size);
} else null;
const content_size: ?u64 = if (descriptor.single_segment_flag or descriptor.content_size_flag > 0) c: {
const field_size = @as(u4, 1) << descriptor.content_size_flag;
const content_size = try in.takeVarInt(u64, .little, field_size);
break :c if (field_size == 2) content_size + 256 else content_size;
} else null;
return .{
.descriptor = descriptor,
.window_descriptor = window_descriptor,
.dictionary_id = dictionary_id,
.content_size = content_size,
};
}