1mod bus_id;
2mod frame;
3mod message_id;
4mod payload_length;
5
6pub use bus_id::BusId;
7pub use frame::{Frame, FrameError};
8pub use message_id::MessageId;
9pub use payload_length::PayloadLength;
10
11pub trait MessageExt {
14 const MSG_ID: MessageId;
15
16 fn message_id(&self) -> MessageId {
17 Self::MSG_ID
18 }
19}
20
21pub trait MessageEncode: MessageExt {
22 fn encode(&self, frame: &mut Frame<&mut [u8]>) -> Result<(), FrameError> {
31 frame.set_message_id(Self::MSG_ID);
32 self.encode_frame(frame)
33 }
34
35 fn encode_frame(&self, frame: &mut Frame<&mut [u8]>) -> Result<(), FrameError>;
36}
37
38pub trait MessageDecode<'buf>: MessageExt {
39 fn decode(frame: &Frame<&'buf [u8]>) -> Result<Self, FrameError>
42 where
43 Self: Sized,
44 {
45 debug_assert_eq!(frame.message_id(), Self::MSG_ID);
46 Self::decode_frame(frame)
47 }
48
49 fn decode_frame(frame: &Frame<&'buf [u8]>) -> Result<Self, FrameError>
50 where
51 Self: Sized;
52}