14 个版本
0.3.3 | 2023年2月7日 |
---|---|
0.3.2 | 2023年2月2日 |
0.2.7 | 2023年1月31日 |
0.1.2 | 2023年1月24日 |
#1476 在 过程宏
每月 30 次下载
用于 2 crate
7KB
59 行
聚合
使用简单的 Derive 宏,在不分配的情况下访问结构体、枚举、联合及其字段的属性。
关于
Aggregate 利用宏的力量、完美哈希函数和懒加载以实现极致性能。
Amalgamate
是代表结构体/枚举/联合的属性结构的单例,位于共享静态内存中,可以通过类型函数调用来访问。
Aggregate 通过递归地调用 aggregate()
在嵌套结构上工作,而不限制可以使用的类型,并且通过简单地将嵌套 Amalgamate
链接到引用来避免运行时开销。
属性保持完整,这意味着在访问时,它们被表示为 syn::Attribute
。然而,从标记解析 所有 属性可能代价高昂且浪费,这就是为什么它们是懒加载的,并且只有在访问时才进行解析。
功能
默认情况下,所有功能都启用。
-
derive
重新导出aggregate_derive
。 -
impl
为常见类型如Option<T>
添加默认实现。 -
fmt
为Amalgamate
实现fmt::Debug
。
用法
aggregate
非常简单易用。
为了聚合您的结构体/枚举/联合的属性,只需将其派生出来
// The prelude is not required for derive,
// however in order to use `aggregate`,
// the trait must be in scope
use aggregate::prelude::*;
/// This attribute is paired with the type
#[derive(Aggregate)]
struct Config {
/// This attribute is paired with the field
switch: bool,
}
Aggregate 支持嵌套
/// This attribute is paired with the type.
#[derive(Aggregate)]
struct ConfigFile {
/// This attribute is paired with the field
///
/// This field has an `inner`, which will
/// include the aggregation of `Config`
///
/// In order for `aggregate_derive` to notice
/// nested structures, you must mark the field
/// with the `#[aggregate]` attribute:
#[aggregate]
my_config: Config,
}
枚举变体中不需要#[aggregate]
属性,但在枚举变体的结构和元组内部则需要。
#[derive(Aggregate)]
enum MyEnum {
/// Variants are automatically included
VariantOne {
/// Fields must be marked
#[aggregate]
field_1: Inner,
},
/// Unnamed structs like this are also
/// supported; `aggregate` simply enumerates
/// the fields for representation
VariantTwo(#[aggregate] Inner),
}
依赖项
约2MB
约43K SLoC