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}