4 个版本

0.2.1 2024年6月3日
0.2.0 2024年5月21日
0.1.1 2024年5月17日
0.1.0 2024年4月18日

Rust 模式 中排名第 1003

每月下载量 26
chinese-format 使用

MIT 许可协议

15KB
67

dyn-error

Rust 的错误相关实用工具

CI Crates.io Version

此软件包提供错误相关实用工具。

特别是,assert_err_box 宏是一种最小化测试 ResultErr<Box<dyn Error>> 内部值的简洁方法

use dyn_error::*;
use std::error::Error;
use std::fmt::Display;

#[derive(Debug, PartialEq, Eq)]
struct MyErr(pub u8);

impl Display for MyErr {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Custom error: {}", self.0)
    }
}

impl Error for MyErr {}

fn main() {
    let result: Result<String, Box<dyn Error>> = Err(Box::new(MyErr(90)));

    assert_err_box!(result, MyErr(90));
}

为了更精细的控制,check_err_box 函数执行相同的测试,但返回一个 Result 而不是调用 panic

use dyn_error::*;
use std::error::Error;
use std::fmt::Display;

//
// Declaring a custom Error type
//
#[derive(Debug, PartialEq, Eq)]
struct MyErr(pub u8);

impl Display for MyErr {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Custom error: {}", self.0)
    }
}

impl Error for MyErr {}

//
// Test scenarios
//
fn main() {
    let result: Result<String, Box<dyn Error>> = Err(Box::new(MyErr(90)));
    assert_eq!(check_err_box(result, MyErr(90)), Ok(()));

    let result: Result<String, Box<dyn Error>> = Err(Box::new(MyErr(90)));
    assert_eq!(
        check_err_box(result, MyErr(7)),
        Err(ErrBoxCheckFailure::NotEqual {
            expected: "Custom error: 7".to_string(),
            actual: "Custom error: 90".to_string()
        })
    );
}

Crates.io

https://crates.io/crates/dyn-error

文档

https://docs.rs/dyn-error

许可协议

MIT

无运行时依赖