Thanks to visit codestin.com
Credit goes to lib.rs

#macro #no-std

no-std nameof

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

8 stable releases

Uses old Rust 2015

1.3.0 Jul 20, 2025
1.2.2 Oct 31, 2021
1.2.1 Aug 17, 2020
1.2.0 Feb 10, 2020
0.1.1 Jan 4, 2018

#1607 in Rust patterns

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

10,557 downloads per month
Used in 19 crates (14 directly)

MIT license

11KB
120 lines

nameof

Crate Version Build Status MIT License

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

Usage

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);
}

Examples

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));
}

License

See LICENSE.txt.

No runtime deps