MCPcopy Create free account
hub / github.com/Recordscript/recordscript / decode_head

Method decode_head

libs/hbb_common/src/bytes_codec.rs:41–66  ·  view source on GitHub ↗
(&mut self, src: &mut BytesMut)

Source from the content-addressed store, hash-verified

39 }
40
41 fn decode_head(&mut self, src: &mut BytesMut) -> io::Result<Option<usize>> {
42 if src.is_empty() {
43 return Ok(None);
44 }
45 let head_len = ((src[0] & 0x3) + 1) as usize;
46 if src.len() < head_len {
47 return Ok(None);
48 }
49 let mut n = src[0] as usize;
50 if head_len > 1 {
51 n |= (src[1] as usize) << 8;
52 }
53 if head_len > 2 {
54 n |= (src[2] as usize) << 16;
55 }
56 if head_len > 3 {
57 n |= (src[3] as usize) << 24;
58 }
59 n >>= 2;
60 if n > self.max_packet_length {
61 return Err(io::Error::new(io::ErrorKind::InvalidData, "Too big packet"));
62 }
63 src.advance(head_len);
64 src.reserve(n);
65 Ok(Some(n))
66 }
67
68 fn decode_data(&self, n: usize, src: &mut BytesMut) -> io::Result<Option<BytesMut>> {
69 if src.len() < n {

Callers 1

decodeMethod · 0.80

Calls 1

is_emptyMethod · 0.80

Tested by

no test coverage detected