| Crates.io | nameof |
| lib.rs | nameof |
| version | 1.3.0 |
| created_at | 2018-01-04 18:10:15.089024+00 |
| updated_at | 2025-07-20 10:51:44.555513+00 |
| description | Provides a Rust macro to determine the string name of a binding, type, const, or function. |
| homepage | https://github.com/SilentByte/nameof |
| repository | https://github.com/SilentByte/nameof.git |
| max_upload_size | |
| id | 45512 |
| size | 12,865 |
The name_of!() macro defined in this crate takes a binding, type, const, 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:
[dependencies]
nameof = "1.3.0"
To use the macro(s), import the crate with the required annotation:
use nameof::name_of;
fn main() {
let text = "Hello, World!";
println!("Binding `{}` holds `{}`.", name_of!(text), text);
}
The name_of!() macro is used as follows:
use nameof::name_of;
struct TestStruct {
test_field: i32,
}
impl TestStruct {
const TEST_CONST: i32 = 1;
}
struct GenericStruct<T> {
test_field_t: T,
}
fn greet() -> &'static str {
"Hi, World"
}
fn main() {
let text = "Hello, World!";
println!("Binding `{}` holds `{}`.", name_of!(text), text);
println!("Function `{}` says `{}`.", name_of!(greet), greet());
println!(
"Struct `{}` has a field `{}`.",
name_of!(type TestStruct),
name_of!(test_field in TestStruct)
);
println!(
"Generic Struct `{}` has a field `{}`.",
name_of!(type GenericStruct<String>),
name_of!(test_field_t in GenericStruct<String>)
);
println!(
"Struct `{}` has an associated constant `{}`.",
name_of!(type TestStruct),
name_of!(const TEST_CONST in TestStruct)
);
println!(
"Standard types such as `{}` and `{}` also work.",
name_of!(type i32),
name_of!(type f64)
);
}
Alternatively, name_of_type!(T) can be used instead of name_of!(type T).
use nameof::name_of_type;
struct TestStruct {
test_field: i32,
}
fn main() {
println!("Struct is called `{}`.", name_of_type!(TestStruct));
println!("Type is called `{}`.", name_of_type!(i32));
}
See LICENSE.txt.