bytes_kman/core/
primitive.rs1use ::core::primitive::bool;
2
3use crate::{TBuffer, TBytes};
4
5impl TBytes for bool {
6 fn size(&self) -> usize {
7 1
8 }
9
10 fn to_bytes(&self) -> Vec<u8> {
11 if *self {
12 vec![1]
13 } else {
14 vec![0]
15 }
16 }
17
18 fn from_bytes(buffer: &mut TBuffer) -> Option<Self>
19 where
20 Self: Sized,
21 {
22 if buffer.len() < Self::default().size() {
23 return None;
24 }
25 let mut buffer = buffer.drain(0..Self::default().size());
26 let byte = buffer.next()?;
27 if byte > 0 {
28 Some(true)
29 } else {
30 Some(false)
31 }
32 }
33}
34
35impl TBytes for f32 {
36 fn size(&self) -> usize {
37 4
38 }
39
40 fn to_bytes(&self) -> Vec<u8> {
41 self.to_le_bytes().to_vec()
42 }
43
44 fn from_bytes(buffer: &mut TBuffer) -> Option<Self>
45 where
46 Self: Sized,
47 {
48 if buffer.len() < Self::default().size() {
49 return None;
50 }
51 let mut buffer = buffer.drain(0..Self::default().size());
52 Some(Self::from_le_bytes([
53 buffer.next()?,
54 buffer.next()?,
55 buffer.next()?,
56 buffer.next()?,
57 ]))
58 }
59}
60
61impl TBytes for f64 {
62 fn size(&self) -> usize {
63 8
64 }
65
66 fn to_bytes(&self) -> Vec<u8> {
67 self.to_le_bytes().to_vec()
68 }
69
70 fn from_bytes(buffer: &mut TBuffer) -> Option<Self>
71 where
72 Self: Sized,
73 {
74 if buffer.len() < Self::default().size() {
75 return None;
76 }
77 let mut buffer = buffer.drain(0..Self::default().size());
78 Some(Self::from_le_bytes([
79 buffer.next()?,
80 buffer.next()?,
81 buffer.next()?,
82 buffer.next()?,
83 buffer.next()?,
84 buffer.next()?,
85 buffer.next()?,
86 buffer.next()?,
87 ]))
88 }
89}
90
91#[cfg(test)]
92mod test {
93 use crate::TBytes;
94
95 #[test]
96 fn bool() {
97 let a = true;
98
99 let mut bytes = a.to_bytes();
100
101 let other = bool::from_bytes(&mut bytes).unwrap();
102
103 assert_eq!(a, other);
104
105 let b = true;
106
107 let mut bytes = b.to_bytes();
108
109 let other = bool::from_bytes(&mut bytes).unwrap();
110
111 assert_eq!(b, other)
112 }
113
114 #[test]
115 fn f32() {
116 let a = 5234.0f32;
117
118 let mut bytes = a.to_bytes();
119
120 let other = f32::from_bytes(&mut bytes).unwrap();
121
122 assert_eq!(a, other)
123 }
124
125 #[test]
126 fn f64() {
127 let a = 43223.32f64;
128
129 let mut bytes = a.to_bytes();
130
131 let other = f64::from_bytes(&mut bytes).unwrap();
132
133 assert_eq!(a, other)
134 }
135}