src/metaprogramming.rs

Thu, 01 May 2025 00:08:09 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Thu, 01 May 2025 00:08:09 -0500
branch
dev
changeset 113
d97fcf22a61c
parent 94
1f19c6bbf07b
permissions
-rw-r--r--

is_zero default

/*!
Metaprogramming tools
*/

/// Reference `x` if so indicated by the first parameter.
/// Typically to be used from another macro.
///
/// ```ignore
/// maybe_ref!(ref, V)   // ➡ &V
/// maybe_ref!(noref, V) // ➡ V
/// ```
macro_rules! maybe_ref {
    (ref, $x:expr) => {
        &$x
    };
    (noref, $x:expr) => {
        $x
    };
    (ref, $x:ty) => {
        &$x
    };
    (noref, $x:ty) => {
        $x
    };
}

/// Choose `a` if first argument is the literal `ref`, otherwise `b`.
// macro_rules! ifref {
//     (noref, $a:expr, $b:expr) => {
//         $b
//     };
//     (ref, $a:expr, $b:expr) => {
//         $a
//     };
// }

/// Annotate `x` with a lifetime if the first parameter
/// Typically to be used from another macro.
///
/// ```ignore
/// maybe_ref!(ref, &'a V)    // ➡ &'a V
/// maybe_ref!(noref, &'a V)  // ➡ V
/// ```
macro_rules! maybe_lifetime {
    (ref, $x:ty) => {
        $x
    };
    (noref, &$lt:lifetime $x:ty) => {
        $x
    };
    (noref, &$x:ty) => {
        $x
    };
}

mercurial