1 | #![macro_use ] |
2 | |
3 | /// Macro to mark a Rust type as NativeTransmutable and test its layout. |
4 | #[macro_export ] |
5 | macro_rules! native_transmutable { |
6 | ($nt:ty, $rt:ty, $test_fn:ident) => { |
7 | impl $crate::prelude::NativeTransmutable<$nt> for $rt {} |
8 | #[test] |
9 | fn $test_fn() { |
10 | use $crate::prelude::NativeTransmutable; |
11 | <$rt>::test_layout(); |
12 | } |
13 | }; |
14 | } |
15 | |
16 | #[macro_export ] |
17 | macro_rules! require_type_equality { |
18 | ($t: ty, $nt: ty) => { |
19 | const _: fn(&$t) = |a| { |
20 | let _: &$nt = a; |
21 | }; |
22 | }; |
23 | } |
24 | |
25 | #[macro_export ] |
26 | macro_rules! require_base_type { |
27 | ($t: ty, $nt: ty) => { |
28 | const _: fn(&$t) = |a| { |
29 | let _: &$nt = &(a._base); |
30 | }; |
31 | }; |
32 | } |
33 | |
34 | /// Macro that implements Send and Sync. |
35 | #[macro_export ] |
36 | macro_rules! unsafe_send_sync { |
37 | ($t: ty) => { |
38 | unsafe impl Send for $t {} |
39 | unsafe impl Sync for $t {} |
40 | }; |
41 | } |
42 | |
43 | /// Macro that verifies a variant name at compile time. |
44 | #[macro_export ] |
45 | macro_rules! variant_name { |
46 | ($t:expr) => { |
47 | const _: fn() = || { |
48 | let _ = $t; |
49 | }; |
50 | }; |
51 | } |
52 | |