pub fn element(
self: *Decoder,
expected: ExpectedTag,
) (error self: *Decoderexpected: ExpectedTag88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106pub fn element(
self: *Decoder,
expected: ExpectedTag,
) (error{ EndOfStream, UnexpectedElement } || Element.DecodeError)!Element {
if (self.index >= self.bytes.len) return error.EndOfStream;
const res = try Element.decode(self.bytes, self.index);
var e = expected;
if (self.field_tag) |ft| {
e.number = @fromBackingInt(@intCast(ft.number));
e.class = ft.class;
}
if (!e.match(res.tag)) {
return error.UnexpectedElement;
}
self.index = if (res.tag.constructed) res.slice.start else res.slice.end;
return res;
}