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 使用
15KB
67 行
dyn-error
Rust 的错误相关实用工具
此软件包提供错误相关实用工具。
特别是,assert_err_box
宏是一种最小化测试 Result
中 Err<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