3个稳定版本
2.0.0 | 2021年4月11日 |
---|---|
1.1.0 | 2021年4月10日 |
1.0.0 | 2021年4月10日 |
#1331 in 过程宏
每月 71 次下载
18KB
259 行
autodefault
一个库,它会自动为你插入..Default::default()
。
简介
这种情况你遇到过吗?
#[derive(Debug, Default, PartialEq, Eq)]
struct Inner {
x: i32,
y: i32,
z: i32,
}
#[derive(Debug, Default, PartialEq, Eq)]
struct Mid {
a: Inner,
b: Inner,
c: Inner,
d: Inner
}
#[derive(Debug, Default, PartialEq, Eq)]
struct Outer {
mid1: Mid,
mid2: Mid,
mid3: Mid,
mid4: Mid,
}
fn build_outer() -> Outer {
Outer {
mid1: Mid {
a: Inner {
x: 10,
..Default::default() // :D
},
b: Inner {
y: 10,
..Default::default() // :)
},
..Default::default() // :|
},
mid2: Mid {
b: Inner {
z: 10,
..Default::default() // :/
},
..Default::default() // :(
},
..Default::default() // >:(
}
}
当构建深层嵌套的结构体字面量时,你是否想省去所有繁琐的..Default::default()
调用?现在你可以做到了!使用autodefault
,构建大型结构体字面量(例如用于测试、bevy组件或其他你需要的东西)从未如此简单!只需将任何函数标记为具有#[autodefault]
属性,剩下的交给我们处理。
use autodefault::autodefault;
#[autodefault]
fn build_outer_simple() -> Outer {
Outer {
mid1: Mid {
a: Inner { x: 10 },
b: Inner { y: 10 },
},
mid2: Mid {
b: Inner { z: 10 },
}
}
} // :O
assert_eq!(build_outer(), build_outer_simple())
从未如此简单!查看参考文档以获取更多详细信息。
依赖
~1.5MB
~35K SLoC