3 个版本 (破坏性)
0.3.0 | 2021 年 7 月 30 日 |
---|---|
0.2.0 | 2021 年 6 月 19 日 |
0.1.0 | 2021 年 6 月 19 日 |
#2186 in Rust 模式
每月 28 次下载
用于 glog
12KB
165 行
IfEmpty
用于需要特定上下文默认值的防御性编程的 crate。
动机
虽然大多数情况下使用 Option
是首选,但在某些情况下,函数调用不返回 Option
,而类型的 Default
也不太有帮助。
现在您可以选择包装这个特殊的函数调用或编写类似以下内容
let foo = {
let b = bar();
if b.is_empty() {
Bar {
// set the default values for your context here
}
} else {
b
}
};
使用此 crate,您可以将其简化为
let foo = bar().if_empty(Bar { /* ... */ });
为您自己的类型实现此功能
为了利用此功能,您必须为您自己的类型实现此行为
use if_empty::*;
struct Foo {
val: bool,
}
impl IfEmpty for Foo {
fn if_empty(self, value: Foo) -> Foo {
if self.is_empty() {
value
} else {
self
}
}
}
有关如何使用 #[derive]
宏的说明,请参阅 derive_macro。
提供类型
该 crate 为 String
、OsString
、&str
和 &OsStr
提供此功能。
依赖关系
~1.5MB
~36K SLoC