doip_codec/
encoder.rs

1use doip_definitions::message::DoipMessage;
2
3use crate::{error::EncodeError, DoipCodec};
4
5impl tokio_util::codec::Encoder<DoipMessage> for DoipCodec {
6    type Error = EncodeError;
7
8    fn encode(
9        &mut self,
10        item: DoipMessage,
11        dst: &mut tokio_util::bytes::BytesMut,
12    ) -> Result<(), Self::Error> {
13        let msg = item.to_bytes();
14
15        dst.reserve(msg.len());
16        dst.extend_from_slice(&msg);
17
18        Ok(())
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use crate::DoipCodec;
25    use doip_definitions::{
26        header::DoipVersion,
27        message::{DoipMessage, VehicleIdentificationRequest},
28    };
29    use tokio_util::{bytes::BytesMut, codec::Encoder};
30
31    #[test]
32    fn test_encode_message() {
33        let mut encoder = DoipCodec {};
34        let mut dst = BytesMut::new();
35
36        let item = DoipMessage::new(
37            DoipVersion::Iso13400_2012,
38            Box::new(VehicleIdentificationRequest {}),
39        );
40
41        let bytes = encoder.encode(item, &mut dst);
42
43        assert!(bytes.is_ok(), "Expected bytes to be ok.");
44
45        assert_eq!(*dst, [0x02, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]);
46    }
47
48    #[test]
49    fn test_encode_many_messages() {
50        let mut encoder = DoipCodec {};
51        let mut dst = BytesMut::new();
52
53        let item_1 = DoipMessage::new(
54            DoipVersion::Iso13400_2012,
55            Box::new(VehicleIdentificationRequest {}),
56        );
57
58        let item_2 = DoipMessage::new(
59            DoipVersion::Iso13400_2012,
60            Box::new(VehicleIdentificationRequest {}),
61        );
62
63        let bytes_1 = encoder.encode(item_1, &mut dst);
64        let bytes_2 = encoder.encode(item_2, &mut dst);
65
66        assert!(bytes_1.is_ok(), "Expected bytes_1 to be ok.");
67        assert!(bytes_2.is_ok(), "Expected bytes_2 to be ok.");
68
69        assert_eq!(
70            *dst,
71            [
72                0x02, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfd, 0x00, 0x01, 0x00, 0x00,
73                0x00, 0x00
74            ]
75        );
76    }
77}