3 个版本 (破坏性)

0.3.0 2021 年 7 月 30 日
0.2.0 2021 年 6 月 19 日
0.1.0 2021 年 6 月 19 日

#2186 in Rust 模式

每月 28 次下载
用于 glog

MPL-2.0 许可证

12KB
165

IfEmpty

CI Status

用于需要特定上下文默认值的防御性编程的 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 为 StringOsString&str&OsStr 提供此功能。

依赖关系

~1.5MB
~36K SLoC