veecle_os_data_support_can/
generate.rs

1//! Macros to generate data types and Veecle OS actors from CAN-DBC
2
3// This is a wrapper macro instead of re-export so that we can pass the `$crate` token in
4// referring to this crate. This makes the macro resilient to dependency renaming and
5// re-exporting which a hardcoded `::veecle_os_data_support_can` path can't be.
6
7/// Parse a CAN-DBC file or source string and generate data types and Veecle OS actors to use with it.
8///
9/// ```rust
10/// veecle_os_data_support_can::generate!(
11///     mod from_file {
12///         #![dbc = include_str!("../../veecle-os-data-support-can-codegen/tests/cases/CSS-Electronics-SAE-J1939-DEMO.dbc")]
13///     }
14/// );
15///
16/// veecle_os_data_support_can::generate!(
17///     mod from_str {
18///         #![dbc = r#"
19///             VERSION ""
20///
21///             NS_ :
22///
23///             BO_ 2364540158 EEC1: 8 Vector__XXX
24///              SG_ EngineSpeed : 24|16@1+ (0.125,0) [0|8031.875] "rpm" Vector__XXX
25///         "#]
26///     }
27/// );
28///
29/// let _ = from_file::Eec1 {
30///     engine_speed: from_file::eec1::EngineSpeed::try_from(0.5).unwrap(),
31/// };
32///
33/// let _ = from_str::Eec1 {
34///     engine_speed: from_str::eec1::EngineSpeed::try_from(0.5).unwrap(),
35/// };
36/// ```
37#[macro_export]
38macro_rules! generate {
39    ($vis:vis mod $name:ident { #![dbc = include_str!($file:literal)] $($extra:tt)* }) => {
40        $crate::reƫxports::veecle_os_data_support_can_macros::from_file!($crate; $vis mod $name; $file; $($extra)* );
41    };
42
43    ($vis:vis mod $name:ident { #![dbc = $str:literal] $($extra:tt)* }) => {
44        $crate::reƫxports::veecle_os_data_support_can_macros::from_str!($crate; $vis mod $name; $str; $($extra)* );
45    };
46}