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