makero

Crates.iomakero
lib.rsmakero
version0.1.2
sourcesrc
created_at2021-09-11 18:46:33.416488
updated_at2021-09-11 18:59:51.99276
descriptionA `macro_rules!` macro to aid in the creation of complex `macro_rules!` macros
homepage
repositoryhttps://github.com/tjjfvi/makero
max_upload_size
id449832
size4,863
T6 (tjjfvi)

documentation

README

By default, macros are processed top-down; for example, foo!(bar!()) will process the foo macro first, using the literal tokens bar ! ( ), and bar will only be processed if foo outputs those tokens verbatim.

Enter makero. Inside makero blocks, invoked helper macros will be processed bottom-up; the below main macro outputs true, but removing makero would cause it to output false instead, as the is_x macro would see make_x ! ( ) instead of x.

use makero::makero;
makero! {
  macro_rules! main {
    () => { is_x!(make_x!()) };
  }

  macro_rules! is_x {
    (x) => { true };
    ($($x:tt)*) => { false };
  }

  macro_rules! make_x {
    () => { x };
  }
}
let out = main!();
assert_eq!(out, true);

The makero macro accepts one or more macro_rules! items; only the top-most one will be externally visible.

Attributes can be applied to the resulting macro by applying them to the top-most macro_rules! definition.

Commit count: 10

cargo fmt