dbc_rs/dbc/
mod.rs

1use crate::{
2    BitTiming, 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
14#[cfg(feature = "attributes")]
15mod attributes_map;
16mod messages;
17mod value_descriptions_map;
18
19// Include modules for additional functionality
20#[cfg(feature = "std")]
21mod builder;
22mod decode;
23mod encode;
24mod impls;
25mod parse;
26#[cfg(feature = "std")]
27mod std;
28mod validate;
29
30// Re-exports
31#[cfg(feature = "attributes")]
32pub use attributes_map::{AttributeDefaultsMap, AttributeDefinitionsMap, AttributeValuesMap};
33#[cfg(feature = "std")]
34pub use builder::DbcBuilder;
35pub use decode::DecodedSignal;
36use messages::Messages;
37use validate::Validate;
38use value_descriptions_map::ValueDescriptionsMap;
39
40/// Represents a complete DBC (CAN database) file.
41///
42/// A `Dbc` contains:
43/// - An optional version string
44/// - A list of nodes (ECUs)
45/// - A collection of messages with their signals
46///
47/// # Examples
48///
49/// ```rust,no_run
50/// use dbc_rs::Dbc;
51///
52/// let dbc_content = r#"VERSION "1.0"
53///
54/// BU_: ECM TCM
55///
56/// BO_ 256 EngineData : 8 ECM
57///  SG_ RPM : 0|16@0+ (0.25,0) [0|8000] "rpm" TCM
58/// "#;
59///
60/// let dbc = Dbc::parse(dbc_content)?;
61/// println!("Parsed {} messages", dbc.messages().len());
62/// # Ok::<(), dbc_rs::Error>(())
63/// ```
64#[derive(Debug, Clone)]
65pub struct Dbc {
66    version: Option<Version>,
67    bit_timing: Option<BitTiming>,
68    nodes: Nodes,
69    messages: Messages,
70    value_descriptions: ValueDescriptionsMap,
71    extended_multiplexing: ExtendedMultiplexings,
72    /// Index for O(1) extended multiplexing lookup by (message_id, signal_name)
73    ext_mux_index: ExtMuxIndex,
74    /// Database-level comment from CM_ (general comment)
75    comment: Option<Comment>,
76    /// Attribute definitions (BA_DEF_)
77    #[cfg(feature = "attributes")]
78    attribute_definitions: AttributeDefinitionsMap,
79    /// Attribute default values (BA_DEF_DEF_)
80    #[cfg(feature = "attributes")]
81    attribute_defaults: AttributeDefaultsMap,
82    /// Attribute values (BA_)
83    #[cfg(feature = "attributes")]
84    attribute_values: AttributeValuesMap,
85}