dbc_rs/dbc/
mod.rs

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