How to create a Rust macro to define a String variable with a private identifier value?

I want to write a macro to define something like below:

let FOO: String = "FOO".to_string(); 

Maybe I have a macro:

 macro_rules! my_macro { ($name: ident, $val: expr) => { let $name: String = $val.to_string(); } } 

and use it like my_macro!(FOO, "FOO");

However, this is a bit redundant. I expect to have something like my_macro!(FOO) , and it can expand and use $name as an identifier, but also in a string value.

+5
source share
1 answer

You want stringify! :

 macro_rules! str_var { ($name:ident) => { let $name = String::from(stringify!($name)); }; } fn main() { str_var!(foo); println!("foo: {:?}", foo); } 
+8
source

Source: https://habr.com/ru/post/1259019/


All Articles