macro_rules! device { ( #[device(identifier = $identifier:literal)] $(#[$doc:meta])* $vis:vis struct $device_name:ident; $( impl $trait_name:ident { $( #[device(invoke = $invoke_name:literal)] fn $fn_name:ident $(<$($generic:ident),+ $(,)?>)? (&self $(, $($param_name:ident : $param_ty:ty),* $(,)?)?) $(-> $ret_ty:ty)?; )+ } )+ ) => { ... }; }