macro_rules! nested {
($dest:expr, |$t:ident| $code:block) => { ... };
($dest:expr, $($x:expr),*) => { ... };
($dest:expr, $($x:expr,)*) => { ... };
}
Expand description
Helper macro to reduce boilerplate needed with nested token expressions.
All arguments being pushed are cloned, which should be cheap for reference types.
ยงExamples
use rstgen::{Tokens, Java, Cons};
let mut toks = Tokens::<Java>::new();
// id being cloned.
let id = Cons::from(String::from("hello"));
nested!(toks, "foo ", id);
nested!(toks, "bar ", id);
let mut out = Vec::new();
out.push(" foo hello");
out.push(" bar hello");
out.push("");
assert_eq!(out.join("\n").as_str(), toks.to_string().unwrap().as_str());
Pushing as a block:
use rsgen::{Tokens, Java, Cons};
use rstgen::Java;
let mut toks = Tokens::<Java>::new();
// id being cloned.
let id = Cons::from(String::from("hello"));
nested!(toks, |t| {
push!(t, "foo ", id);
push!(t, "bar ", id);
});
let mut out = Vec::new();
out.push(" foo hello");
out.push(" bar hello");
out.push("");
assert_eq!(out.join("\n").as_str(), toks.to_string().unwrap().as_str());