4 个稳定版本
2.0.2 | 2023年12月16日 |
---|---|
1.0.0 | 2023年6月28日 |
#489 in Rust 模式
22KB
207 行
::mini-macro-magic
🪄
将令牌导出到其他模块或crate。现在100%减少了proc宏!
该crate提供export
宏,允许导出令牌。该概念类似于此crate的灵感来源macro_magic
。也就是说,生成一个macro_rules!
。这个macro_rules!
将调用传入的宏并使用导出的令牌。
与macro_magic
的不同之处在于,此crate使用一个macro_rules!
宏来完成所有操作。如果您不需要macro_magic
的全部功能,就不需要在这些proc宏中进行轮询。相反,使用export
来生成一个您或依赖项crate可以使用的宏。此外,依赖项crate不需要了解mini_macro_magic
就可以使用生成的macro_rules!
。它们完全自包含。
export
宏允许进行一种形式的反射。通过检查定义的令牌来检查项目的定义。由于macro_rules
(以及Rust宏)无法主动展开它们的输入,因此export
创建了一个宏,您可以传递另一个宏调用以便它展开。
use mini_macro_magic::{export, emit};
// Export the definition of `MyStruct`.
// Note without using `emit!()` `MyStruct` isn't actually created in this scope.
export!(
#[export(my_struct$)]
{
struct MyStruct;
}
);
// An example macro that can parse a struct definition and get the name
// of the struct as a string.
macro_rules! name_of_struct {
{{
$(#[$($attr:tt)*])*
$vis:vis struct $name:ident;
}} => {
stringify!($name)
};
}
// Invoke `name_of_struct` with the definition of `MyStruct`.
assert_eq!(my_struct!(name_of_struct!()), "MyStruct");
#![no_std]
mini_macro_magic
是 #![no_std]
,它可以在 Rust 可用的任何地方使用。
支持的最低 Rust 版本
需要 Rust 1.56.0。
此 crate 遵循 "最新稳定 Rust" 政策。列出的最低支持版本除非必要不会更改。然而,更新到发布时的最新稳定版本是允许的。
许可证
可以选择根据您的意愿在 Apache 许可证 2.0 版 或 MIT 许可证 下进行许可。除非您明确表示,否则根据 Apache-2.0 许可证定义的,您提交给 mini-macro-rules 的任何有意贡献将根据上述方式进行双重许可,不附加任何额外条款或条件。