peripherals/macros/
mod.rs

1mod device;
2mod field_type;
3mod periph;
4mod register;
5
6#[macro_export]
7#[doc(hidden)]
8macro_rules! periph_attr_inner {
9    (@expand $($rest:tt)*) => { $($rest)* };
10
11    (@$kind:ident {} {$($attr:tt)*} { $callback:ident: @ $rule:ident $($args:tt)*}) => {
12        $crate::$callback!(@$rule $($attr)* $($args)*);
13    };
14
15    (@type {[$(type)? $(all)?: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
16        $crate::periph_attr_inner!(@type {$($rest)*} {$($exp)* #[$attr]} $callback);
17    };
18    (@type {[$kind:ident: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
19        $crate::periph_attr_inner!(@type {$($rest)*} {$($exp)*} $callback);
20    };
21    (@type {[$attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
22        $crate::periph_attr_inner!(@type {$($rest)*} {$($exp)* #[$attr]} $callback);
23    };
24
25    (@field {[$(field)? $(all)?: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
26        $crate::periph_attr_inner!(@field {$($rest)*} {$($exp)* #[$attr]} $callback);
27    };
28    (@field {[$kind:ident: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
29        $crate::periph_attr_inner!(@field {$($rest)*} {$($exp)*} $callback);
30    };
31    (@field {[$attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
32        $crate::periph_attr_inner!(@field {$($rest)*} {$($exp)* #[$attr]} $callback);
33    };
34
35    (@impl {[$(impl)? $(all)?: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
36        $crate::periph_attr_inner!(@impl {$($rest)*} {$($exp)* #[$attr]} $callback);
37    };
38    (@impl {[$kind:ident: $attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
39        $crate::periph_attr_inner!(@impl {$($rest)*} {$($exp)*} $callback);
40    };
41    (@impl {[$attr:meta] $($rest:tt)*} {$($exp:tt)*} $callback:tt) => {
42        $crate::periph_attr_inner!(@impl {$($rest)*} {$($exp)*} $callback);
43    };
44}