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 日 |
在 #aggregate 中排名第 50
每月下载量 25 次
在 aggregate 中使用
17KB
251 行(不含注释)
Aggregate
使用简单的 Derive 宏,在不分配资源的情况下访问结构体、枚举、联合及其字段的属性。
关于
Aggregate 利用宏、完美哈希函数和懒加载来提供极致性能。
Amalgamate
是表示结构体/枚举/联合的属性结构的单例,位于共享静态内存中,可以通过类型函数调用进行访问。
Aggregate 通过递归调用 aggregate()
来工作,它可以在嵌套结构中调用,而不限制可用的类型,并且通过简单地通过引用链接嵌套的 Amalgamate
来避免运行时开销。
属性保持完整,这意味着在访问时,它们表示为 syn::Attribute
。然而,从标记中解析所有属性可能代价高昂且浪费,这就是为什么它们是懒加载的,并且只有在访问时才进行解析。
功能
默认情况下,所有功能都启用。
-
derive
重新导出aggregate_derive
。 -
impl
为常见类型如Option<T>
添加默认实现。 -
fmt
为Amalgamate
实现fmt::Debug
。
用法
aggregate
的使用非常简单。
为了聚合结构体/枚举/联合的属性,只需进行 derive
// 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