Macro r3_portkit::pptext::pp_text_macro
source · pub macro pp_text_macro {
(
$vis:vis macro $name:ident {
$($text:tt)*
}
) => { ... },
(
@internal,
// The text being munched
text: [{
$text:literal
$($rest_text:tt)*
}],
// A pool of unique identifiers.
free_idents: [{ $($free_idents:tt)* }],
// The contents of the generated private module.
private_mod: [{ $($private_mod:tt)* }],
// The contents of the generated macro..
macro_inner: [{ $($macro_inner:tt)* }],
define_macro: [$define_macro:tt],
) => { ... },
(
@internal,
text: [{
$($macro:ident)::+!($($params:tt)*)
$($rest_text:tt)*
}],
free_idents: [{ $($free_idents:tt)* }],
private_mod: [{ $($private_mod:tt)* }],
macro_inner: [{ $($macro_inner:tt)* }],
define_macro: [$define_macro:tt],
) => { ... },
(
@internal,
text: [{
if cfg!( $($cfg:tt)* ) {
$($true_text:tt)*
} else {
$($false_text:tt)*
}
$($rest_text:tt)*
}],
free_idents: [{ $free_ident:ident $($rest_free_idents:tt)* }],
private_mod: [{ $($private_mod:tt)* }],
macro_inner: [{ $($macro_inner:tt)* }],
define_macro: [{ $vis:vis $name:ident }],
) => { ... },
(
@internal,
text: [{
if cfg!( $($cfg:tt)* ) {
$($true_text:tt)*
}
$($rest_text:tt)*
}],
free_idents: [$free_idents:tt],
private_mod: [$private_mod:tt],
macro_inner: [$macro_inner:tt],
define_macro: [$define_macro:tt],
) => { ... },
(
@internal,
text: [{}],
free_idents: [{ $free_ident:ident $($rest_free_idents:tt)* }],
private_mod: [{ $($private_mod:tt)* }],
macro_inner: [{ $($macro_inner:tt)* }],
define_macro: [{ $vis:vis $name:ident }],
) => { ... },
}
Expand description
Define a macro that produces a string literal whose contents is revealed
or masked based on the current build configuration (cfg!
).
Examples
#![feature(decl_macro)]
r3_portkit::pptext::pp_text_macro! {
macro get_text {
"endianness = "
if cfg!(target_endian = "little") { "little" } else { "big" } ", "
"running on "
if cfg!(unix) { "a unix-like system" } else { "an unknown kind of system" }
}
}
// `get_text!()` expands to a string literal that can be used in many
// places where a string literal is expected
const TEXT: &str = concat!(get_text!(), "\n");
assert_eq!(
TEXT,
format!(
"endianness = {}, running on {}\n",
if cfg!(target_endian = "little") { "little" } else { "big" },
if cfg!(unix) { "a unix-like system" } else { "an unknown kind of system" },
),
);