use paste::paste; use paste_test_suite::paste_test; #[test] fn test_attr() { paste! { #[paste_test(k = "val" "ue")] struct A; #[paste_test_suite::paste_test(k = "val" "ue")] struct B; #[::paste_test_suite::paste_test(k = "val" "ue")] struct C; #[paste_test(k = "va" [] e)] struct D; } let _ = A; let _ = B; let _ = C; let _ = D; } #[test] fn test_paste_cfg() { macro_rules! m { ($ret:ident, $width:expr) => { paste! { #[cfg(any(feature = "protocol_feature_" $ret:snake, target_pointer_width = "" $width))] fn new() -> $ret { todo!() } } }; } struct Paste; #[cfg(target_pointer_width = "64")] m!(Paste, 64); #[cfg(target_pointer_width = "32")] m!(Paste, 32); let _ = new; } #[test] fn test_path_in_attr() { macro_rules! m { (#[x = $x:ty]) => { stringify!($x) }; } let ty = paste! { m!(#[x = foo::Bar]) }; assert_eq!("foo::Bar", ty); }