fennec_modbus/protocol/codec/
encoder.rs1use alloc::vec::Vec;
2
3use bytes::BufMut;
4
5pub trait Encode {
6 fn encode(&self, to: &mut impl BufMut);
7
8 fn to_bytes(&self) -> Vec<u8> {
9 let mut bytes = Vec::new();
10 self.encode(&mut bytes);
11 bytes
12 }
13}
14
15impl<T: Encode, const N: usize> Encode for [T; N] {
16 fn encode(&self, to: &mut impl BufMut) {
17 for item in self {
18 item.encode(to);
19 }
20 }
21}
22
23macro_rules! impl_be {
24 ($type:ty => $encode:ident) => {
25 impl Encode for $type {
26 fn encode(&self, to: &mut impl BufMut) {
27 to.$encode(*self);
28 }
29 }
30 };
31}
32
33impl_be!(u16 => put_u16);
34impl_be!(i16 => put_i16);
35impl_be!(u32 => put_u32);
36impl_be!(i32 => put_i32);
37impl_be!(u64 => put_u64);
38impl_be!(i64 => put_i64);
39impl_be!(u128 => put_u128);
40impl_be!(i128 => put_i128);