10个版本
0.2.6 | 2019年3月20日 |
---|---|
0.2.5 | 2019年3月20日 |
0.1.2 | 2019年3月17日 |
在#get中排名第9
每月下载量:29
25KB
287 行
Getters By Type
此包提供了GettersByType
派生宏,用于为结构体实现包含每种类型的getter方法。
生成的函数以前缀get_fields_
开头,并以它们引用的类型名称结尾。
使用GettersByType
的示例
#[derive(GettersByType)]
struct Foo {
first: i32,
second: i32,
third: i32,
}
let object = Foo { first: 6, second: 12, third: 24 };
// Let's sum all the i32 fields with a fold expression:
assert_eq!(object.get_fields_i32().iter().fold(0, |acc, x| **x + acc), 42);
如您所注意到的,getter方法返回一个包含所有相同类型字段引用的数组。在这个例子中,方法get_fields_i32
的返回类型将是[&i32; 3]
。
此包还提供了一个具有相同功能的mut
版本GettersMutByType
,为这些方法添加了可变版本。
在这种情况下,生成的函数以前缀get_mut_fields_
开头。
使用GettersMutByType
的示例
#[derive(GettersMutByType)]
struct Foo {
first: Updater,
second: Updater,
...
onehundredth: Updater,
}
impl Updater {
fn update(&mut self) {...}
}
let mut object = Foo::new();
// Let's update all the Updater fields
for updater in object.get_mut_fields_updater().iter_mut() {
updater.update();
}
在这个例子中,方法get_mut_fields_updater
的返回类型将是[&mut Updater; 3]
。getter方法中不发生动态内存分配,因为它们只是返回一个固定数组中的引用。也没有生成不安全代码。
有关更多信息,请参阅文档页面。
用法
使用Cargo,您可以将此行添加到您的Cargo.toml中
[dependencies]
getters-by-type = "*"
开发
目前此功能与原始类型以及许多其他引用和泛型类型一起工作,例如&str
或Vec
,但有些情况尚未完全覆盖,例如特例对象。想要贡献吗?拉取请求始终欢迎。因为这是我第一次使用过程宏,我想事情在底层可以有很大的改进,所以应该有一些低垂的果实。让我们去摘它们吧!
授权
MIT
依赖关系
~2MB
~46K SLoC