mwc_libp2p_core/
simple_ser.rs1pub struct SimplePushSerializer {
5 vec_data: Vec<u8>,
6 pub version: u16,
7}
8
9impl SimplePushSerializer {
10 pub fn new(version: u16) -> Self {
11 let mut ser = SimplePushSerializer {
12 vec_data: vec![],
13 version,
14 };
15 ser.push_u16(ser.version);
16 ser
17 }
18
19 pub fn to_vec(self) -> Vec<u8> { self.vec_data }
20 pub fn data_len(&self) -> usize {self.vec_data.len()}
21
22 pub fn push_u16(&mut self, data: u16) {
23 self.vec_data.push( (data / 256) as u8 );
24 self.vec_data.push( (data % 256) as u8 );
25 }
26
27 pub fn push_vec(&mut self, data: &[u8]) {
28 let sz = data.len();
29 debug_assert!(sz<65536);
30 self.push_u16(sz as u16);
31 self.vec_data.append(&mut data.to_vec());
32 }
33}
34
35pub struct SimplePopSerializer<'a> {
36 vec_data: &'a [u8],
37 pub version: u16,
38 position: usize,
39}
40
41impl<'a> SimplePopSerializer<'a> {
42 pub fn new(vec: &'a [u8] ) -> Self {
43 let mut ser = SimplePopSerializer {
44 vec_data: vec,
45 version:0,
46 position: 0,
47 };
48 ser.version = ser.pop_u16();
49 ser
50 }
51
52 pub fn pop_u16(&mut self) -> u16 {
53 if self.position+2 > self.vec_data.len() {
54 return 0;
55 }
56 let res: u16 = (self.vec_data[self.position] as u16) * 256 +
57 self.vec_data[self.position+1] as u16;
58 self.position += 2;
59 res
60 }
61
62 pub fn pop_vec(&mut self) -> Vec<u8> {
63 let sz = self.pop_u16() as usize;
64 if sz==0 || self.position+sz > self.vec_data.len() {
65 return vec![];
66 }
67
68 let res = self.vec_data[ self.position .. (self.position+sz) ].to_vec();
69 self.position += sz;
70 res
71 }
72
73 pub fn skip_u16(&mut self) {
74 self.position += 2;
75 }
76
77 pub fn skip_vec(&mut self) {
78 let sz = self.pop_u16() as usize;
79 self.position += sz;
80 }
81
82}