dbc_codegen2/ir/
message.rs1use 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}