tree: c6cf06eaeb6260b209005a235558241b0d1a70bb [path history] [tgz]
  1. example/
  2. lazy-static/
  3. Cargo.toml
  4. README.md
examples/lazy-static/README.md

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