macro_rules! paste {
($($tt:tt)*) => { ... };
}
Expand description
paste
Allows to paste identifiers together.
Reexported from the paste
crate.
Within the paste!
macro, identifiers inside [<
…>]
are pasted
together to form a single identifier.
§Examples
paste! {
// Defines a const called `QRST`.
const [<Q R S T>]: &str = "success!";
}
fn main() {
assert_eq!(
paste! { [<Q R S T>].len() },
8,
);
}
§Case conversion
Use $var:lower
or $var:upper
in the segment list to convert an
interpolated segment to lower- or uppercase as part of the paste. For
example, [<ld_ $reg:lower _expr>]
would paste to ld_bc_expr
if invoked
with $reg=Bc
.
Use $var:snake
to convert CamelCase input to snake_case.
Use $var:camel
to convert snake_case to CamelCase. These compose,
so for example $var:snake:upper
would give you SCREAMING_CASE.
The precise Unicode conversions are as defined by str::to_lowercase
and str::to_uppercase
.
§Pasting documentation strings
Within the paste!
macro, arguments to a #[doc ...]
attribute are
implicitly concatenated together to form a coherent documentation string.
macro_rules! method_new {
($ret:ident) => {
paste! {
#[doc = "Create a new `" $ret "` object."]
pub fn new() -> $ret { todo!() }
}
};
}
pub struct Paste {}
method_new!(Paste); // expands to #[doc = "Create a new `Paste` object"]