#io-error #path #failure #wrapper #helper #user-friendly #display

废弃 common_failures

废弃:用于 failure 的辅助函数,包括带有路径的 io::Error 包装器、quick_main! 和 display_causes_and_backtrace。由于 failure 已长时间废弃,因此废弃。

3 个不稳定版本

0.2.0 2024 年 3 月 4 日
0.1.1 2018 年 5 月 15 日
0.1.0 2017 年 12 月 24 日

#52 in #user-friendly

Download history 27/week @ 2024-03-14 32/week @ 2024-03-21 61/week @ 2024-03-28 61/week @ 2024-04-04 24/week @ 2024-04-11 38/week @ 2024-04-18 33/week @ 2024-04-25 22/week @ 2024-05-02 28/week @ 2024-05-09 27/week @ 2024-05-16 23/week @ 2024-05-23 30/week @ 2024-05-30 23/week @ 2024-06-06 19/week @ 2024-06-13 21/week @ 2024-06-20 12/week @ 2024-06-27

每月 77 次下载
5 crates 中使用

CC0 许可证

19KB
230

common_failures: 用户友好的 io::Error 包装器,quick_main!

Latest version License Build Status Build status (AppVeyor)

我们提供支持

  • 用户友好的带有路径名的 io::Error 包装器
  • 格式化错误以供用户显示(包括整个错误链!),以及
  • quick_main! 之类的实用辅助工具。

基本目标是使 failure 尽可能方便,这样每个人都可以停止重新发明常见的支持代码。

用户友好的 io::Error 包装器

默认情况下,Rust 的 I/O 错误不包含有关失败操作的信息。这意味着你经常会看到类似

No such file or directory (os error 2)

但如果我们打印出类似的内容,对用户来说会好得多

Error: error reading the file no-such-file.txt
  caused by: No such file or directory (os error 2)

为此,我们可以使用 io_read_context 和相关函数

use common_failures::prelude::*;
use std::fs::File;
use std::path::Path;

fn open_example(path: &Path) -> Result<File> {
    Ok(File::open(path).io_read_context(path)?)
}

格式化错误以供用户显示

我们还提供将错误格式化为字符串的支持,包括错误“原因”的整个链

format!("{}", err.display_causes_and_backtrace());

quick_main!

这是 error-chain crate 中 quick_main! 的替代品。它生成一个 main 函数,该函数调用返回 Result<()> 的第二个函数,并打印出任何错误。

#[macro_use]
extern crate common_failures;
#[macro_use]
extern crate failure;

// This imports `Result`, `Error`, `failure::ResultExt`, and possibly
// other useful extension traits, to get you a minimal useful API.
use common_failures::prelude::*;

// Uncomment this to define a `main` function that calls `run`, and prints
// any errors that it returns to standard error.
quick_main!(run);

fn run() -> Result<()> {
    if true {
        Ok(())
    } else {
        Err(format_err!("an error occurred"))
    }
}

依赖关系

~64KB