INNER CODE UNIT · Rust
decode
qaul/qaul.net · rust/libp2p_modules/varint_prefixed_codec/src/lib.rs:80
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
// return if package is empty or smaller than the biggest
// unsigned_varint encoding of an unsigned 64 bit integer.
if src.len() <= 10 {
return Ok(None);
}
// get `unsigned_varint` encoded message length
let (message_length, remaining) = match unsigned_varint::decode::usize(src) {
Ok((len, remaining)) => (len, remaining),
Err(unsigned_varint::decode::Error::Insufficient) => return Ok(None),
Err(err) => return Err(Error::new(ErrorKind::InvalidData, err)),
};
// check if package length exceeds limit.
if message_length > self.max_message_len_bytes {
return Err(Error::new(
ErrorKind::PermissionDenied,