use bytes::{Buf, BufMut, Bytes, BytesMut};
use std::io;
use tokio_util::codec::{Decoder, Encoder};
#[derive(Debug, Clone, Copy)]
pub struct BytesCodec {
    state: DecodeState,
    raw: bool,
    max_packet_length: usize,
}
#[derive(Debug, Clone, Copy)]
enum DecodeState {
    Head,
    Data(usize),
}
impl Default for BytesCodec {
    fn default() -> Self {
        Self::new()
    }
}
impl BytesCodec {
    pub fn new() -> Self {
        Self {
            state: DecodeState::Head,
            raw: false,
            max_packet_length: usize::MAX,
        }
    }
    pub fn set_raw(&mut self) {
        self.raw = true;
    }
    pub fn set_max_packet_length(&mut self, n: usize) {
        self.max_packet_length = n;
    }
    fn decode_head(&mut self, src: &mut BytesMut) -> io::Result