in src/protocol/thrift/src/lib.rs [53:76]
fn parse(&self, buffer: &[u8]) -> Result<ParseOk<Message>, std::io::Error> {
if buffer.len() < THRIFT_HEADER_LEN {
return Err(std::io::Error::from(std::io::ErrorKind::WouldBlock));
}
let data_len = u32::from_be_bytes([buffer[0], buffer[1], buffer[2], buffer[3]]);
let framed_len = THRIFT_HEADER_LEN + data_len as usize;
if framed_len == 0 || framed_len > self.max_size {
return Err(std::io::Error::from(std::io::ErrorKind::InvalidInput));
}
if buffer.len() < framed_len {
Err(std::io::Error::from(std::io::ErrorKind::WouldBlock))
} else {
MESSAGES_PARSED.increment();
let data = buffer[THRIFT_HEADER_LEN..framed_len]
.to_vec()
.into_boxed_slice();
let message = Message { data };
Ok(ParseOk::new(message, framed_len))
}
}