src/metaprogramming.rs

Sun, 27 Apr 2025 20:29:43 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Sun, 27 Apr 2025 20:29:43 -0500
changeset 94
1f19c6bbf07b
parent 75
e9f4550cfa18
permissions
-rw-r--r--

Fix build with stable rust.

For optimisations, build.rs now automatically sets a nightly cfg flag,
so problems with the nightly feature are avoided. It is still used for
required for additional nightly-only features.

/*!
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