3 个版本
0.3.3 | 2023年2月7日 |
---|---|
0.3.2 | 2023年2月2日 |
0.2.7 |
|
0.1.2 |
|
#2395 在 Rust 模式
36 每月下载量
12KB
97 行
Aggregate
使用简单的 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
~44K SLoC