7 /// |
7 /// |
8 /// ```ignore |
8 /// ```ignore |
9 /// maybe_ref!(ref, V) // ➡ &V |
9 /// maybe_ref!(ref, V) // ➡ &V |
10 /// maybe_ref!(noref, V) // ➡ V |
10 /// maybe_ref!(noref, V) // ➡ V |
11 /// ``` |
11 /// ``` |
12 #[macro_export] |
|
13 macro_rules! maybe_ref { |
12 macro_rules! maybe_ref { |
14 (ref, $x:expr) => { &$x }; |
13 (ref, $x:expr) => { |
15 (noref, $x:expr) => { $x }; |
14 &$x |
16 (ref, $x:ty) => { &$x }; |
15 }; |
17 (noref, $x:ty) => { $x }; |
16 (noref, $x:expr) => { |
|
17 $x |
|
18 }; |
|
19 (ref, $x:ty) => { |
|
20 &$x |
|
21 }; |
|
22 (noref, $x:ty) => { |
|
23 $x |
|
24 }; |
18 } |
25 } |
19 |
26 |
20 /// Choose `a` if first argument is the literal `ref`, otherwise `b`. |
27 /// Choose `a` if first argument is the literal `ref`, otherwise `b`. |
21 #[macro_export] |
28 // macro_rules! ifref { |
22 macro_rules! ifref { |
29 // (noref, $a:expr, $b:expr) => { |
23 (noref, $a:expr, $b:expr) => { $b }; |
30 // $b |
24 (ref, $a:expr, $b:expr) => { $a }; |
31 // }; |
25 } |
32 // (ref, $a:expr, $b:expr) => { |
26 |
33 // $a |
|
34 // }; |
|
35 // } |
27 |
36 |
28 /// Annotate `x` with a lifetime if the first parameter |
37 /// Annotate `x` with a lifetime if the first parameter |
29 /// Typically to be used from another macro. |
38 /// Typically to be used from another macro. |
30 /// |
39 /// |
31 /// ```ignore |
40 /// ```ignore |
32 /// maybe_ref!(ref, &'a V) // ➡ &'a V |
41 /// maybe_ref!(ref, &'a V) // ➡ &'a V |
33 /// maybe_ref!(noref, &'a V) // ➡ V |
42 /// maybe_ref!(noref, &'a V) // ➡ V |
34 /// ``` |
43 /// ``` |
35 #[macro_export] |
|
36 macro_rules! maybe_lifetime { |
44 macro_rules! maybe_lifetime { |
37 (ref, $x:ty) => { $x }; |
45 (ref, $x:ty) => { |
38 (noref, &$lt:lifetime $x:ty) => { $x }; |
46 $x |
39 (noref, &$x:ty) => { $x }; |
47 }; |
|
48 (noref, &$lt:lifetime $x:ty) => { |
|
49 $x |
|
50 }; |
|
51 (noref, &$x:ty) => { |
|
52 $x |
|
53 }; |
40 } |
54 } |
41 |
|