jppe/encode/
impls_float.rs1use crate::std::*;
2use crate::{ByteEncode, BorrowByteEncode, ByteOrder, ContainerAttrModifiers, FieldAttrModifiers};
3
4
5macro_rules! encode_float {
6 ($t:ident, $as_t:ident) => {
7 impl ByteEncode for $t {
8 fn encode(&self, input: &mut Vec<u8>, cattr: Option<&ContainerAttrModifiers>, fattr: Option<&FieldAttrModifiers>)
9 where
10 Self: Sized
11 {
12 match crate::get_byteorder(cattr, fattr) {
13 ByteOrder::Be => input.extend(self.to_be_bytes()),
14 ByteOrder::Le => input.extend(self.to_le_bytes()),
15 }
16 }
17 }
18
19
20 impl BorrowByteEncode for $t {
21 fn encode(&self, input: &mut Vec<u8>, cattr: Option<&ContainerAttrModifiers>, fattr: Option<&FieldAttrModifiers>)
22 where
23 Self: Sized
24 {
25 match crate::get_byteorder(cattr, fattr) {
26 ByteOrder::Be => input.extend(self.to_be_bytes()),
27 ByteOrder::Le => input.extend(self.to_le_bytes()),
28 }
29 }
30 }
31 };
32
33 () => {
34 encode_float!(f32, u32);
35 encode_float!(f64, u64);
36 }
37}
38
39
40encode_float!();
41
42
43#[cfg(test)]
44mod tests {
45 use crate::BorrowByteEncode;
46
47 #[test]
48 fn test_encode_f32() {
49 let mut buf = vec![];
50 let value = 0.1_f32;
51 value.encode(&mut buf, None, None);
52 assert_eq!(buf, [61, 204, 204, 205]);
53
54 let mut buf = vec![];
55 let value = 0.1_f32;
56 let cattr = crate::ContainerAttrModifiers {
57 byteorder: Some(crate::ByteOrder::Le),
58 ..Default::default()
59 };
60 value.encode(&mut buf, Some(&cattr), None);
61 assert_eq!(buf, [205, 204, 204, 61]);
62
63 let mut buf = vec![];
64 let value = 0.1_f32;
65 let cattr = crate::ContainerAttrModifiers {
66 byteorder: Some(crate::ByteOrder::Le),
67 ..Default::default()
68 };
69 let fattr = crate::FieldAttrModifiers {
70 byteorder: Some(crate::ByteOrder::Be),
71 ..Default::default()
72 };
73 value.encode(&mut buf, Some(&cattr), Some(&fattr));
74 assert_eq!(buf, [61, 204, 204, 205]);
75 }
76
77 #[test]
78 fn test_encode_f64() {
79 let mut buf = vec![];
80 let value = 0.1_f64;
81 value.encode(&mut buf, None, None);
82 assert_eq!(buf, [63, 185, 153, 153, 153, 153, 153, 154]);
83
84 let mut buf = vec![];
85 let value = 0.1_f64;
86 let cattr = crate::ContainerAttrModifiers {
87 byteorder: Some(crate::ByteOrder::Le),
88 ..Default::default()
89 };
90 value.encode(&mut buf, Some(&cattr), None);
91 assert_eq!(buf, [154, 153, 153, 153, 153, 153, 185, 63]);
92
93 let mut buf = vec![];
94 let value = 0.1_f64;
95 let cattr = crate::ContainerAttrModifiers {
96 byteorder: Some(crate::ByteOrder::Le),
97 ..Default::default()
98 };
99 let fattr = crate::FieldAttrModifiers {
100 byteorder: Some(crate::ByteOrder::Be),
101 ..Default::default()
102 };
103 value.encode(&mut buf, Some(&cattr), Some(&fattr));
104 assert_eq!(buf, [63, 185, 153, 153, 153, 153, 153, 154]);
105 }
106}