nameof 0.1.1

Provides a Rust macro to determine the string name of a binding, type, or function.
Documentation

nameof

Crate Version Build Status MIT License

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!().

Usage

Add nameof as a dependency to your project's Cargo.toml file:

[dependencies]
nameof = "*"

To use the macro(s), import the crate with the required annotation:

#[macro_use]
extern crate nameof;

fn main() {
    let text = "Hello, World!";
    println!("Variable `{}` holds `{}`.", name_of!(text), text);
}

Examples

The name_of!() macro is used as follows:

#[macro_use]
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).

#[macro_use]
extern crate nameof;

fn main() {
    struct TestStruct { test_field: i32 }
    println!("Struct is called `{}`.", name_of_type!(TestStruct));
    println!("Struct is called `{}`.", name_of_type!(i32));
}

License

See LICENSE.txt.