#boolean #conversion #extension #result #options

无 std fool

布尔型和求和类型互操作性的特质

4 个版本

0.0.4 2020 年 8 月 28 日
0.0.3 2020 年 5 月 18 日
0.0.2 2019 年 8 月 12 日
0.0.1 2018 年 11 月 21 日

#44#result


plexus 中使用

MIT 许可证

13KB
270

愚者 是一个 Rust 库,用于 boolOption 以及 Result 求和类型的互操作性。愚者还提供了布尔组合的宏,以及不要求 std 的布尔强制转换特质。

GitHub docs.rs crates.io


lib.rs:

boolOption 以及 Result 求和类型互操作性的特质。

愚者提供了 bool 和求和类型的扩展特质,以及 OptionResult 的布尔强制转换特质。 BoolExt 允许将 bool 流畅转换为求和类型。 IntoBool 允许使用 boolOptionResult 类型进行复合布尔谓词,并且具有隐式转换。

0.0.* 系列的版本是实验性的且不稳定的。

泛化匹配

在 Rust 1.46 中,Option::zip API 被稳定化。愚者为 Rust 的先前版本提供了 OptionExt::zip_ext,并在启用 zip 功能时提供了一个泛化的 zip 函数。该 zip 函数接受最多六个 Option 的元组,并将它们折叠成一个单个 Option,如果所有输入都是 Some

与提议的 corestd API 冲突

《BoolExt》和《OptionExt》中的一些扩展方法与Rust后续版本中添加到《core》和《std》的不稳定API相匹配。Fool通过使用《_ext》后缀来避免与这些API冲突,但可以通过《bare》功能特性包含这些API的裸名称。

使用裸扩展方法可能会导致升级到包含这些API的Rust工具链后出现错误,因为调用可能变得模糊。例如,BoolExt::then_some_ext映射了bool::then_some,在撰写本文时,它尚未成为稳定的API。

示例

使用then_ext(或带有《bare》功能标志的then)从布尔表达式创建一个Option

use fool::BoolExt;
use std::collections::HashSet;

let mut set = HashSet::new();
set.insert(10u32);

let message = set.contains(&10u32).then_ext(|| "Contains 10!".to_owned());

使用ok_or_else和try运算符?来返回错误

use fool::BoolExt;

struct Door {
    is_open: bool,
}

impl Door {
    pub fn close(&mut self) -> Result<(), ()> {
        self.is_open().ok_or_else(|| ())?;
        self.is_open = false;
        Ok(())
    }

    pub fn is_open(&self) -> bool {
        self.is_open
    }
}

依赖关系

~110KB