#枚举 #单子 # #结果 #选项

结果类似

为您的自定义枚举提供的Option/Result-like单子接口

12次发布

0.5.0 2023年12月29日
0.4.6 2023年2月23日
0.4.5 2022年8月7日
0.4.3 2022年6月7日
0.1.0 2020年1月4日

#238Rust模式

Download history 2916/week @ 2024-04-11 2790/week @ 2024-04-18 3020/week @ 2024-04-25 2436/week @ 2024-05-02 2759/week @ 2024-05-09 2052/week @ 2024-05-16 3184/week @ 2024-05-23 3743/week @ 2024-05-30 1764/week @ 2024-06-06 2404/week @ 2024-06-13 2541/week @ 2024-06-20 2143/week @ 2024-06-27 1667/week @ 2024-07-04 1733/week @ 2024-07-11 1729/week @ 2024-07-18 1523/week @ 2024-07-25

6,910 每月下载量
6 个crate中使用 (通过 rustpython-vm)

BSD-2-Clause-Views

12KB
97 代码行

OptionLike 和 ResultLike

安装: https://crates.io/crates/result-like

定义您自己的类似Option和Result的枚举类型。避免为您的枚举重新实现所有功能。

Option示例

use result_like::OptionLike;

// Simple case with single argument name to use Some and None
#[derive(OptionLike)]
enum MyOption<T> {
    Some(T),
    None,
}

let v = MyOption::Some(1);
// every option utilities are possible including unwrap, map, and, or etc.
assert_eq!(v.unwrap(), 1);

// convertable to option
let opt = v.into_option();
assert_eq!(opt, Some(1));

// enum with custom names instead of Some and None
#[derive(OptionLike)]
enum Number {
    Value(i64),
    Nan,
}

let v = Number::Value(10);
assert_ne!(v, Number::Nan);

以相同方式的结果示例

use result_like::ResultLike;

// typical
#[derive(ResultLike)]
enum MyResult<T, E> {
    Ok(T),
    Err(E),
}

// value-only
#[derive(ResultLike)]
enum Trial {
    Success(String),
    Failure(String),
}

依赖关系

~310–770KB
~18K SLoC