13个不稳定版本 (3个破坏性版本)
0.3.2 | 2021年5月7日 |
---|---|
0.3.1 | 2021年4月8日 |
0.2.2 | 2021年4月3日 |
0.2.1 | 2021年3月29日 |
0.0.88 | 2021年3月21日 |
#4 in #traversing
在3个crate中使用了(通过lens-rs)
105KB
2.5K SLoC
概述
为自定义数据类型派生lens。
查看指南
示例
#[derive(Debug, Lens)]
struct Baz<'a, A, B, C>{
#[optic(ref)]
a: &'a A, // can only take the immutable ref by optics::a
#[optic(mut)]
b: &'a mut B, // can take the mutable ref by optics::b
#[optic]
c: C // can mv it out by by optics::c
}
#[derive(Review, Prism, Debug)]
enum AnEnum<T> {
A(T, i32), // couldn't derive Prism or Review
#[optic]
B(T),
#[optic]
C,
#[optic]
D(),
#[optic]
E {},
}
#[derive(Lens, Debug)]
struct Foo {
#[optic] a: i32,
#[optic] b: i32,
}
fn test() -> Option<()> {
let x = Review::review(optics!(Some.B), Foo {
a: 3,
b: 2,
});
assert_eq!(x.preview(optics!(Some.B.b))?, 2);
Some(())
}
限制
- 不能为枚举派生
Lens
。 - 不能为具有多个参数或具有命名字段的变体派生
Prism
和Review
。
依赖项
~1.2–1.8MB
~42K SLoC