Skip to content

Latest commit

 

History

History

lazy-static

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

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