10 个不稳定版本 (3 个破坏性更新)
0.4.5 | 2022 年 5 月 25 日 |
---|---|
0.4.4 | 2022 年 5 月 24 日 |
0.3.0 | 2022 年 5 月 22 日 |
0.2.0 | 2021 年 8 月 3 日 |
0.1.9 | 2020 年 9 月 2 日 |
#816 在 Rust 模式
每月 25 次下载
72KB
1K SLoC
woah
一种将可处理的本地错误和不可处理的致命错误分开的 Result
。
有时候,你希望能够在不处理某些错误的情况下将错误向上传递,同时方便地在本地级别处理其他类型的错误。你可能试图通过在 Result
上进行手动模式匹配,或者通过构建 Result<Result<T, LocalError>, FatalError>
来实现这一点。相反,你可以使用 woah
!
示例
use woah::prelude::*;
use rand::prelude::*;
fn main() {
match get_data() {
Success(data) => println!("{}", data),
LocalErr(e) => eprintln!("error: {:?}", e),
FatalErr(e) => eprintln!("error: {:?}", e),
}
}
/// Get data from an HTTP API.
fn get_data() -> Result<String, LocalError, FatalError> {
match do_http_request()? {
Ok(data) => Success(data),
Err(e) => {
eprintln!("error: {:?}... retrying", e);
get_data()
}
}
}
/// Make an HTTP request.
///
/// This is simulated with randomly returning either a time out
/// or a request failure.
fn do_http_request() -> Result<String, LocalError, FatalError> {
if random() {
LocalErr(LocalError::RequestTimedOut)
} else {
FatalErr(FatalError::RequestFailed)
}
}
/// Errors which can be handled.
#[derive(Debug)]
enum LocalError {
RequestTimedOut,
}
/// Errors which can't be handled.
#[derive(Debug)]
enum FatalError {
RequestFailed,
}
使用
woah
可以在稳定版 Rust 中使用,但在 nightly 版本中使用最佳。
在 nightly 版本中,启用 nightly
功能后,你可以使用 Try
trait,它允许使用 ?
操作符来传播致命错误。在稳定版中,你必须将 std::result::Result
转换为 ?
操作符,这不太方便。
特性
特性名称 | 默认? | 目的 |
---|---|---|
nightly |
否 | 允许使用 ? 操作符与 woah::Result ,并添加基于 std 中不稳定 API 的一些其他便利 trait 实现。 |
std |
是 | 使用 std 进行导入,添加 Termination 和 ExitCode API,如果启用 either ,则将 std 启用为 either 。 |
either |
是 | 向 woah::Result 添加方法,以便与 Either<LocalErr, FatalErr> 进行操作 |
serde |
否 | 为 woah::Result 实现 Serialize 和 Deserialize |
许可证
woah
采用 MIT 或 Apache 2.0 双重许可。
依赖项
~220KB