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: () = ();
| ^^