in netbench/src/multiplex/frame.rs [103:171]
fn decode_frame<B: Buf>(&mut self, buf: &mut B, tag: Tag) -> Result<Option<Frame>> {
match tag {
Tag::StreamOpen => {
if buf.remaining() < (size_of::<u64>() + size_of::<u8>()) {
self.tag = Some(tag);
return Ok(None);
}
let id = buf.get_u64();
let bidirectional = buf.get_u8() != 0;
Ok(Some(Frame::StreamOpen { id, bidirectional }))
}
Tag::StreamData => {
if buf.remaining() < (size_of::<u64>() + size_of::<u8>() + size_of::<u32>()) {
self.tag = Some(tag);
return Ok(None);
}
let id = buf.get_u64();
let owner = Self::decode_owner(buf)?;
let len = buf.get_u32();
self.decode_stream(buf, id, owner, len as _)
}
Tag::StreamFinish => {
if buf.remaining() < (size_of::<u64>() + size_of::<u8>()) {
self.tag = Some(tag);
return Ok(None);
}
let id = buf.get_u64();
let owner = Self::decode_owner(buf)?;
Ok(Some(Frame::StreamFinish { id, owner }))
}
Tag::MaxStreams => {
if buf.remaining() < size_of::<u64>() {
self.tag = Some(tag);
return Ok(None);
}
let up_to = buf.get_u64();
Ok(Some(Frame::MaxStreams { up_to }))
}
Tag::MaxStreamData => {
if buf.remaining() < (size_of::<u64>() + size_of::<u8>() + size_of::<u64>()) {
self.tag = Some(tag);
return Ok(None);
}
let id = buf.get_u64();
let owner = Self::decode_owner(buf)?;
let up_to = buf.get_u64();
Ok(Some(Frame::MaxStreamData { id, owner, up_to }))
}
Tag::InitialMaxStreamData => {
if buf.remaining() < (size_of::<u64>()) {
self.tag = Some(tag);
return Ok(None);
}
let up_to = buf.get_u64();
Ok(Some(Frame::InitialMaxStreamData { up_to }))
}
}
}