watermelon_proto/proto/decoder/
framed.rs1use bytes::Bytes;
2
3use crate::proto::ServerOp;
4
5use super::{DecoderError, DecoderStatus};
6
7pub fn decode_frame(frame: &mut Bytes) -> Result<ServerOp, FrameDecoderError> {
13 let mut status = DecoderStatus::ControlLine { last_bytes_read: 0 };
14 match super::decode(&mut status, frame) {
15 Ok(Some(server_op)) => Ok(server_op),
16 Ok(None) => Err(FrameDecoderError::IncompleteFrame),
17 Err(err) => Err(FrameDecoderError::Decoder(err)),
18 }
19}
20
21#[derive(Debug, thiserror::Error)]
22pub enum FrameDecoderError {
23 #[error("incomplete frame")]
24 IncompleteFrame,
25 #[error("decoder error")]
26 Decoder(#[source] DecoderError),
27}