dbc_rs/dbc/mod.rs
1use crate::{ExtendedMultiplexing, MAX_EXTENDED_MULTIPLEXING, Nodes, Version, compat::Vec};
2
3type ExtendedMultiplexings = Vec<ExtendedMultiplexing, { MAX_EXTENDED_MULTIPLEXING }>;
4
5// Index for fast extended multiplexing lookup by (message_id, signal_name)
6// Maps to indices into the extended_multiplexing vec
7mod ext_mux_index;
8use ext_mux_index::ExtMuxIndex;
9
10// Module declarations
11mod messages;
12mod value_descriptions_map;
13
14// Include modules for additional functionality
15#[cfg(feature = "std")]
16mod builder;
17mod decode;
18mod impls;
19mod parse;
20#[cfg(feature = "std")]
21mod std;
22mod validate;
23
24// Re-exports
25#[cfg(feature = "std")]
26pub use builder::DbcBuilder;
27pub use decode::DecodedSignal;
28use messages::Messages;
29use validate::Validate;
30use value_descriptions_map::ValueDescriptionsMap;
31
32/// Represents a complete DBC (CAN database) file.
33///
34/// A `Dbc` contains:
35/// - An optional version string
36/// - A list of nodes (ECUs)
37/// - A collection of messages with their signals
38///
39/// # Examples
40///
41/// ```rust,no_run
42/// use dbc_rs::Dbc;
43///
44/// let dbc_content = r#"VERSION "1.0"
45///
46/// BU_: ECM TCM
47///
48/// BO_ 256 EngineData : 8 ECM
49/// SG_ RPM : 0|16@0+ (0.25,0) [0|8000] "rpm" TCM
50/// "#;
51///
52/// let dbc = Dbc::parse(dbc_content)?;
53/// println!("Parsed {} messages", dbc.messages().len());
54/// # Ok::<(), dbc_rs::Error>(())
55/// ```
56#[derive(Debug, Clone)]
57pub struct Dbc {
58 version: Option<Version>,
59 nodes: Nodes,
60 messages: Messages,
61 value_descriptions: ValueDescriptionsMap,
62 extended_multiplexing: ExtendedMultiplexings,
63 /// Index for O(1) extended multiplexing lookup by (message_id, signal_name)
64 ext_mux_index: ExtMuxIndex,
65}