#stringify #macro #argument #string #context #arguments #name #binding #bindings

nameof

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

9 releases (stable)

Uses old Rust 2015

1.2.2 Oct 31, 2021
1.2.1 Aug 17, 2020
1.2.0 Feb 10, 2020
1.1.0 May 29, 2019
0.1.1 Jan 4, 2018

#240 in Rust patterns

Download history 1029/week @ 2022-08-17 880/week @ 2022-08-24 696/week @ 2022-08-31 1018/week @ 2022-09-07 1088/week @ 2022-09-14 902/week @ 2022-09-21 758/week @ 2022-09-28 993/week @ 2022-10-05 1230/week @ 2022-10-12 754/week @ 2022-10-19 745/week @ 2022-10-26 1205/week @ 2022-11-02 830/week @ 2022-11-09 1061/week @ 2022-11-16 910/week @ 2022-11-23 801/week @ 2022-11-30

3,779 downloads per month
Used in 6 crates (5 directly)

MIT license

10KB
115 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.2.2"

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