Crates.io | fn_name |
lib.rs | fn_name |
version | 0.1.0 |
source | src |
created_at | 2022-05-11 17:44:15.552064 |
updated_at | 2022-05-11 17:44:15.552064 |
description | Macros that produce the name of the function they're invoked within. |
homepage | |
repository | https://github.com/jswrenn/fn_name |
max_upload_size | |
id | 584817 |
size | 17,834 |
fn_name
Macros that produce the name of the function they're invoked within.
The uninstantiated!
macro produces the name of the surrounding function or method, without generics instantiated; e.g.:
struct GenericType<A>(A);
impl<A> GenericType<A> {
fn generic_method<B>(self, _: B) -> &'static str {
fn_name::uninstantiated!()
}
}
fn main() {
assert_eq!(
GenericType(42u8).generic_method(false),
"GenericType<_>::generic_method"
);
}
The instantiated!
macro produces the name of the surrounding function or method, including instantiated generics (if any); e.g.:
struct GenericType<A>(A);
impl<A> GenericType<A> {
fn generic_method<B>(self, _: B) -> &'static str {
fn_name::instantiated!()
}
}
fn main() {
assert_eq!(
GenericType(42u8).generic_method(false),
"GenericType<u8>::generic_method<bool>"
);
}
The expansion of these macros is not (yet) const evaluable; their implementations rely on core::any::type_name
, which is not a const fn
.