2个不稳定版本
使用旧Rust 2015
0.2.0 | 2018年4月2日 |
---|---|
0.1.0 | 2018年4月2日 |
#8 in #with
6KB
51 行
Withers Derive
一个用于为结构体属性实现wither方法的宏。
Wither模式
Wither模式包括使用方法来修改结构体实例,通常以with_
开头。
#[derive(Withers, Default)]
struct Foo {
bar: u32,
baz: Option<bool>
}
fn main() {
let instance = foo::default()
.with_bar(32)
.with_baz(Some(false));
}
此实现生成消耗方法,因此实例被修改和消耗,并且不能再以先前状态使用。
Wither与Builder的比较
尽管Wither模式与Builder模式相似,但
- Wither模式不需要单独的结构体。
- Wither模式允许轻松修改现有实例(这与
clone
和/或copy
一起很有用)。 - Wither模式不会导致由于未初始化属性而导致的运行时错误。
然而
- Wither模式要求结构体能够使用默认和合理的值进行初始化。否则,在初始化时可能会捕获的错误可能会在以后导致意外的行为。
- Builder通常可以存储并用于生成结构体的多个实例,而withers直接操作实例。
如果您觉得这些问题可能对您有问题,那么derive_builder crate可能更适合您的需求。
它的作用
以下代码
#[macro_use]
extern crate withers_derive;
#[derive(Withers)]
struct Foo {
bar: u32,
baz: Option<bool>
}
将生成类似以下代码
struct Foo {
bar: u32,
baz: Option<bool>
}
#[allow(dead_code)]
impl Foo {
fn with_bar(mut self, value: u32) -> Self {
self.bar = value;
self
}
fn with_baz(mut self, value: Option<bool>) -> Self {
self.baz = value;
self
}
}
快速入门
- 将
wither_derive
依赖项添加到您的Cargo.toml
文件中。 - 导入crate和宏
#[macro_use]
extern crate withers_derive;
- 使用
#[derive(Withers)]
注释结构体。
许可证
贡献
请Fork存储库并将拉取请求提交到master。较大的代码更改应使用GitHub问题进行跟踪。
依赖项
~2MB
~47K SLoC