Skip to main content

orbyte/
serialize.rs

1pub trait Serialize {
2    fn serialize(&self) -> Vec<u8>;
3}
4
5impl Serialize for u8 {
6    fn serialize(&self) -> Vec<u8> {
7        vec![*self]
8    }
9}
10
11impl Serialize for u16 {
12    fn serialize(&self) -> Vec<u8> {
13        self.to_le_bytes().to_vec()
14    }
15}
16
17impl Serialize for u32 {
18    fn serialize(&self) -> Vec<u8> {
19        self.to_le_bytes().to_vec()
20    }
21}
22
23impl Serialize for u64 {
24    fn serialize(&self) -> Vec<u8> {
25        self.to_le_bytes().to_vec()
26    }
27}
28
29impl Serialize for i32 {
30    fn serialize(&self) -> Vec<u8> {
31        self.to_le_bytes().to_vec()
32    }
33}
34
35impl Serialize for i64 {
36    fn serialize(&self) -> Vec<u8> {
37        self.to_le_bytes().to_vec()
38    }
39}
40
41impl Serialize for f32 {
42    fn serialize(&self) -> Vec<u8> {
43        self.to_le_bytes().to_vec()
44    }
45}
46
47impl Serialize for f64 {
48    fn serialize(&self) -> Vec<u8> {
49        self.to_le_bytes().to_vec()
50    }
51}
52
53impl Serialize for bool {
54    fn serialize(&self) -> Vec<u8> {
55        vec![*self as u8]
56    }
57}
58
59impl Serialize for char {
60    fn serialize(&self) -> Vec<u8> {
61        (*self as u32).serialize()
62    }
63}
64
65impl Serialize for String {
66    fn serialize(&self) -> Vec<u8> {
67        let mut bytes = Vec::new();
68        bytes.push(self.len() as u8);
69        bytes.extend(self.as_bytes());
70        bytes
71    }
72}
73
74impl Serialize for Vec<u8> {
75    fn serialize(&self) -> Vec<u8> {
76        self.clone()
77    }
78}
79
80impl<T: Serialize> Serialize for Option<T> {
81    fn serialize(&self) -> Vec<u8> {
82        match self {
83            None => vec![],
84            Some(value) => value.serialize(),
85        }
86    }
87}