#metadata #meta #function #no-std

no-std fn_meta

Returns metadata about a function at runtime

13 releases (7 breaking)

Uses new Rust 2024

new 0.8.0 Mar 17, 2025
0.7.4 Aug 31, 2024
0.7.3 Aug 1, 2022
0.7.1 Jul 4, 2022
0.1.0 Apr 26, 2021

#312 in Development tools

21 downloads per month
Used in 2 crates

MIT/Apache

43KB
1K SLoC

🧬 FnMeta

Crates.io docs.rs CI Coverage Status

Returns metadata about a function at runtime.

Currently this includes the TypeIds of function parameters.

This includes a FnMetadata struct and FnMetadataExt trait. FnMetadataExt adds the .metadata() function on functions and closures to return a FnMetadata, whose implementation returns function metadata at runtime.

Usage

Add the following to Cargo.toml

fn_meta = "0.8.0"

# or
fn_meta = { version = "0.8.0", features = ["fn_meta_ext"] }

Code:

use core::any::TypeId;

use fn_meta::{FnMetaDyn, FnMetadataExt};

fn f1(_: &S0, _: &mut S1, _: &S2) -> () {}

let fn_metadata = f1.metadata();

assert_eq!(
    [TypeId::of::<S0>(), TypeId::of::<S2>()],
    fn_metadata.borrows().as_slice()
);
assert_eq!([TypeId::of::<S1>()], fn_metadata.borrow_muts().as_slice());

struct S0;
struct S1;
struct S2;

Features

"fn_meta_ext":

Enables the FnMeta and FnMetaExt traits. FnMetaExt adds the .meta() function on functions and closures to return a Box<dyn FnMeta>, which is the dynamic dispatch analog to FnMetadata.

"high_arg_count":

Raises the number of arguments that FnMetaExt and FnMetadataExt are implemented for from 6 to 8.

This is feature gated because compilation time increasing significantly with higher numbers of arguments -- as much as from 1.5 seconds for 6 arguments to 8 seconds for 8 arguments.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies