The name_of!()
macro defined in this crate takes a binding, type, or function as an argument and returns its unqualified string representation. If the identifier does not exist in the current context, the macro will cause a compilation error. This macro is mainly intended for debugging purposes and to improve the refactoring experience compared to stringify!()
.
Add nameof
as a dependency to your project's Cargo.toml
file:
toml
[dependencies]
nameof = "*"
To use the macro(s), import the crate with the required annotation:
```rust
extern crate nameof;
fn main() {
let text = "Hello, World!";
println!("Variable {}
holds {}
.", name_of!(text), text);
}
```
The name_of!()
macro is used as follows:
```rust
extern crate nameof;
fn main() {
// Bindings
let text = "Hello, World!";
println!("Variable {}
holds {}
.", name_of!(text), text);
// Functions
fn greet() { }
println!("Function is called `{}`.", name_of!(greet));
// Types & Fields
struct TestStruct { test_field: i32 }
println!("Struct is called `{}`.", name_of!(type TestStruct));
println!("Standard Types: `{}`.", name_of!(type i32));
println!("Field is called `{}`.", name_of!(test_field for TestStruct));
} ```
Alternatively, name_of_type!(T)
can be used instead of name_of!(type T)
.
```rust
extern crate nameof;
fn main() {
struct TestStruct { testfield: i32 }
println!("Struct is called {}
.", nameoftype!(TestStruct));
println!("Struct is called {}
.", nameof_type!(i32));
}
```
See LICENSE.txt.