1#![cfg_attr(not(feature = "std"), no_std)]
30#![deny(unused_must_use)]
31#![forbid(unsafe_code)]
32
33#[cfg(feature = "std")]
34extern crate std;
35
36#[cfg(all(not(feature = "std"), feature = "alloc"))]
37extern crate alloc;
38
39mod byte_order;
40mod compat;
41mod dbc;
42mod error;
43mod message;
44mod nodes;
45mod parser;
46mod receivers;
47mod signal;
48#[cfg(feature = "std")]
49mod value_descriptions;
50mod version;
51
52pub use byte_order::ByteOrder;
53#[cfg(feature = "std")]
54pub use dbc::ValueDescriptionsList;
55pub use dbc::{Dbc, MessageList};
56pub use error::{Error, Result};
57pub use message::{Message, SignalList};
58pub use nodes::Nodes;
59pub use receivers::Receivers;
60pub use signal::Signal;
61#[cfg(feature = "std")]
62pub use value_descriptions::{ValueDescriptions, ValueDescriptionsBuilder};
63pub use version::Version;
64
65#[cfg(feature = "std")]
66pub use dbc::DbcBuilder;
67#[cfg(feature = "std")]
68pub use message::MessageBuilder;
69#[cfg(feature = "std")]
70pub use nodes::NodesBuilder;
71#[cfg(feature = "std")]
72pub use receivers::ReceiversBuilder;
73#[cfg(feature = "std")]
74pub use signal::SignalBuilder;
75#[cfg(feature = "std")]
76pub use version::VersionBuilder;
77
78pub(crate) use parser::Parser;
79
80#[inline]
90pub(crate) fn validate_name<S: AsRef<str>>(name: S) -> Result<compat::String<{ MAX_NAME_SIZE }>> {
91 let name_str: &str = name.as_ref();
92
93 if name_str.len() > MAX_NAME_SIZE {
96 return Err(Error::Expected(error::lang::MAX_NAME_SIZE_EXCEEDED));
97 }
98
99 compat::String::try_from(name_str)
102 .map_err(|_| Error::Expected(error::lang::MAX_NAME_SIZE_EXCEEDED))
103}
104
105#[inline]
112pub(crate) fn check_max_limit<E>(len: usize, max: usize, error: E) -> Option<E> {
113 if len > max { Some(error) } else { None }
114}
115
116#[cfg(feature = "std")]
120pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
121
122include!(concat!(env!("OUT_DIR"), "/limits.rs"));
132
133pub(crate) const VERSION: &str = "VERSION";
135pub(crate) const CM_: &str = "CM_";
136pub(crate) const NS_: &str = "NS_";
137pub(crate) const BS_: &str = "BS_";
138pub(crate) const BU_: &str = "BU_";
139pub(crate) const BO_: &str = "BO_";
140pub(crate) const SG_: &str = "SG_";
141pub(crate) const VAL_TABLE_: &str = "VAL_TABLE_";
142pub(crate) const BA_DEF_: &str = "BA_DEF_";
143pub(crate) const BA_DEF_DEF_: &str = "BA_DEF_DEF_";
144pub(crate) const BA_: &str = "BA_";
145pub(crate) const VAL_: &str = "VAL_";
146pub(crate) const SIG_GROUP_: &str = "SIG_GROUP_";
147pub(crate) const SIG_VALTYPE_: &str = "SIG_VALTYPE_";
148pub(crate) const EV_: &str = "EV_";
149pub(crate) const BO_TX_BU_: &str = "BO_TX_BU_";
150
151pub(crate) const VECTOR__INDEPENDENT_SIG_MSG: &str = "VECTOR__INDEPENDENT_SIG_MSG";
153pub(crate) const VECTOR__XXX: &str = "VECTOR__XXX";
154pub(crate) const BA_DEF_DEF_REL_: &str = "BA_DEF_DEF_REL_";
155pub(crate) const BA_DEF_SGTYPE_: &str = "BA_DEF_SGTYPE_";
156pub(crate) const SIGTYPE_VALTYPE_: &str = "SIGTYPE_VALTYPE_";
157pub(crate) const ENVVAR_DATA_: &str = "ENVVAR_DATA_";
158pub(crate) const SIG_TYPE_REF_: &str = "SIG_TYPE_REF_";
159pub(crate) const NS_DESC_: &str = "NS_DESC_";
160pub(crate) const BA_DEF_REL_: &str = "BA_DEF_REL_";
161pub(crate) const BA_SGTYPE_: &str = "BA_SGTYPE_";
162pub(crate) const SGTYPE_VAL_: &str = "SGTYPE_VAL_";
163pub(crate) const BU_SG_REL_: &str = "BU_SG_REL_";
164pub(crate) const BU_EV_REL_: &str = "BU_EV_REL_";
165pub(crate) const BU_BO_REL_: &str = "BU_BO_REL_";
166pub(crate) const SG_MUL_VAL_: &str = "SG_MUL_VAL_";
167pub(crate) const BA_REL_: &str = "BA_REL_";
168pub(crate) const CAT_DEF_: &str = "CAT_DEF_";
169pub(crate) const EV_DATA_: &str = "EV_DATA_";
170pub(crate) const CAT_: &str = "CAT_";
171pub(crate) const FILTER: &str = "FILTER";
172
173#[cfg_attr(not(feature = "std"), allow(dead_code))]
174const DBC_KEYWORDS: &[&str] = &[
175 VECTOR__INDEPENDENT_SIG_MSG,
176 VECTOR__XXX,
177 BA_DEF_DEF_REL_,
178 BA_DEF_SGTYPE_,
179 SIGTYPE_VALTYPE_,
180 ENVVAR_DATA_,
181 SIG_TYPE_REF_,
182 NS_DESC_,
183 BA_DEF_REL_,
184 BA_SGTYPE_,
185 SGTYPE_VAL_,
186 VAL_TABLE_,
187 SIG_GROUP_,
188 SIG_VALTYPE_,
189 BO_TX_BU_,
190 BU_SG_REL_,
191 BU_EV_REL_,
192 BU_BO_REL_,
193 SG_MUL_VAL_,
194 BA_DEF_DEF_,
195 BA_DEF_,
196 BA_REL_,
197 CAT_DEF_,
198 EV_DATA_,
199 BA_,
200 VAL_,
201 CM_,
202 CAT_,
203 NS_,
204 BS_,
205 BU_,
206 BO_,
207 SG_,
208 EV_,
209 VERSION,
210 FILTER,
211];