peripherals/macros/
mod.rs1mod 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}