bytes_kman/core/
primitive.rs

1use ::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}