An example of parsing a custom syntax within a functionlike!(...)
procedural
macro. Demonstrates how to trigger custom warnings and error messages on
individual tokens of the input.
The library implements a lazy_static!
macro similar to the one from the real
lazy_static
crate on
crates.io.
lazy_static! {
static ref USERNAME: Regex = Regex::new("^[a-z0-9_-]{3,16}$").unwrap();
}
Compile and run the example by doing cargo run
in the directory of the
example
crate.
The implementation shows how to trigger custom warnings and error messages on
the macro input. For example if you try adding an uncreatively named FOO
lazy
static, the macro will scold you with the following warning.
warning: come on, pick a more creative name
--> src/main.rs:10:16
|
10 | static ref FOO: String = "lazy_static".to_owned();
| ^^^
And if you try to lazily initialize () = ()
, the macro will outright refuse to
compile it for you.
error: I can't think of a legitimate use for lazily initializing the value `()`
--> src/main.rs:10:27
|
10 | static ref UNIT: () = ();
| ^^