1mod decoder;
2mod encoder;
3mod wrapped;
4pub use decoder::*;
5pub use encoder::*;
6
7use crate::buffer::{Buff, BuffMut};
8
9pub fn pre_encode(pkt: &[u8], len: usize) -> BuffMut {
10 assert!(pkt.len() <= 65535);
11 assert!(pkt.len() + 2 <= len);
12 let hdr = (pkt.len() as u16).to_le_bytes();
14 let mut bts = BuffMut::new();
15 bts.extend_from_slice(&hdr);
16 bts.extend_from_slice(pkt);
17 bts.extend_from_slice(&vec![0u8; len - pkt.len() - 2]);
18 bts
19}
20
21fn post_decode(raw: Buff) -> Option<Buff> {
22 if raw.len() < 2 {
23 return None;
24 }
25 let body_len = u16::from_le_bytes([raw[0], raw[1]]) as usize;
26 if raw.len() < 2 + body_len {
27 return None;
28 }
29 Some(raw.slice(2..2 + body_len))
30}