src/metaprogramming.rs

changeset 90
b3c35d16affe
parent 75
e9f4550cfa18
equal deleted inserted replaced
25:d14c877e14b7 90:b3c35d16affe
1 /*!
2 Metaprogramming tools
3 */
4
5 /// Reference `x` if so indicated by the first parameter.
6 /// Typically to be used from another macro.
7 ///
8 /// ```ignore
9 /// maybe_ref!(ref, V) // ➡ &V
10 /// maybe_ref!(noref, V) // ➡ V
11 /// ```
12 #[macro_export]
13 macro_rules! maybe_ref {
14 (ref, $x:expr) => { &$x };
15 (noref, $x:expr) => { $x };
16 (ref, $x:ty) => { &$x };
17 (noref, $x:ty) => { $x };
18 }
19
20 /// Choose `a` if first argument is the literal `ref`, otherwise `b`.
21 #[macro_export]
22 macro_rules! ifref {
23 (noref, $a:expr, $b:expr) => { $b };
24 (ref, $a:expr, $b:expr) => { $a };
25 }
26
27
28 /// Annotate `x` with a lifetime if the first parameter
29 /// Typically to be used from another macro.
30 ///
31 /// ```ignore
32 /// maybe_ref!(ref, &'a V) // ➡ &'a V
33 /// maybe_ref!(noref, &'a V) // ➡ V
34 /// ```
35 #[macro_export]
36 macro_rules! maybe_lifetime {
37 (ref, $x:ty) => { $x };
38 (noref, &$lt:lifetime $x:ty) => { $x };
39 (noref, &$x:ty) => { $x };
40 }
41

mercurial