Skip to main content

dbc_codegen2/ir/
message.rs

1use crate::ir::{Identifier, SignalIdx, MessageLayoutIdx};
2use can_dbc::MessageId as ParsedMessageId;
3use can_dbc::Transmitter as ParsedTransmitter;
4
5#[derive(Debug, Clone)]
6pub struct Message {
7    pub id: MessageId,
8    pub name: Identifier,
9    pub size: u64,
10    pub transmitter: Transmitter,
11    pub signal_idxs: Vec<SignalIdx>,
12    pub layout: MessageLayoutIdx,
13}
14
15impl Message {
16    pub fn from_parsed(
17        id: ParsedMessageId, 
18        name: String,
19        size: u64,
20        transmitter: ParsedTransmitter,
21        signals: Vec<SignalIdx>,
22        layout: MessageLayoutIdx,
23    ) -> Self {
24        Message {
25            id: id.into(),
26            name: Identifier(name),
27            size: size,
28            transmitter: Transmitter::from(transmitter),
29            signal_idxs: signals,
30            layout: layout,
31        }
32    }
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Hash)]
36pub enum MessageId {
37    Standard(u16),
38    Extended(u32),
39}
40impl From<ParsedMessageId> for MessageId {
41    fn from(value: ParsedMessageId) -> Self {
42        match value {
43            ParsedMessageId::Standard(v) => MessageId::Standard(v),
44            ParsedMessageId::Extended(v) => MessageId::Extended(v),
45        }
46    }
47}
48
49#[derive(Debug, Clone)]
50pub enum Transmitter {
51    Node(Identifier),
52    VectorXXX,
53}
54impl From<ParsedTransmitter> for Transmitter {
55    fn from(value: ParsedTransmitter) -> Self {
56        match value {
57            ParsedTransmitter::NodeName(s) => Transmitter::Node(Identifier(s)),
58            ParsedTransmitter::VectorXXX => Transmitter::VectorXXX,
59        }
60    }
61}