| 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" [<l u>] 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); |
| } |