#metadata #meta #function #no-std

no-std fn_meta

在运行时返回函数的元数据

11个版本 (6个重大更新)

0.7.3 2022年8月1日
0.7.1 2022年7月4日
0.4.1 2021年12月10日
0.4.0 2021年11月6日
0.1.0 2021年4月26日

#17#meta


2 crates 使用

MIT/Apache

44KB
1K SLoC

🧬 FnMeta

Crates.io docs.rs CI Coverage Status

在运行时返回函数的元数据。

目前这包括函数参数的 TypeId

这包括一个 FnMetadata 结构体和一个 FnMetadataExt 特性。 FnMetadataExt 在函数和闭包上添加了 .metadata() 函数,用于返回一个 FnMetadata,其实施在运行时返回函数元数据。

用法

将以下内容添加到 Cargo.toml

fn_meta = "0.7.3"

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

代码

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;

功能

"fn_meta_ext":

启用 FnMetaFnMetaExt 特性。 FnMetaExt 在函数和闭包上添加了 .meta() 函数,返回一个 Box<dyn FnMeta>,它是 FnMetadata 的动态分派类似物。

"high_arg_count":

FnMetaExtFnMetadataExt 的实现参数数量从6增加到8。

这因为随着参数数量的增加,编译时间显著增加,从6个参数的1.5秒增加到8个参数的8秒。

许可

许可如下

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在作品中的贡献,都应如上双重许可,而不附加任何其他条款或条件。

依赖