【发布时间】:2020-09-18 18:17:06
【问题描述】:
我有一个自定义错误,我用它来包装几个标准的 Rust 错误,如下所示:
#[derive(Debug)]
pub struct MyError {
details: String,
}
impl MyError {
fn new(msg: &str) -> MyError {
dbg!(msg);
MyError {
details: msg.to_string(),
}
}
}
impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.details)
}
}
impl From<std::io::Error> for MyError {
fn from(err: std::io::Error) -> Self {
MyError::new(&err.to_string())
}
}
impl From<std::string::FromUtf8Error> for MyError {
fn from(err: std::string::FromUtf8Error) -> Self {
MyError::new(&err.to_string())
}
}
现在,我只是将错误消息冒泡到我的 MyError 中。但是,我还想创建一个返回底层错误类型的方法,以便我可以在稍后的时间点将其与 Enum 或其他内容匹配。如何将新方法添加到输出基础错误类型的错误中?我看到 Error.kind() 可能是我正在寻找的东西,但我无法让它工作。
【问题讨论】:
-
你为什么不让
MyError一个枚举不同类型的错误呢?enum MyError { Utf8(std::string::FromUtf8Error), Io(std::io::Error) } -
你可能还想看看
Anytrait。 doc.rust-lang.org/std/any/index.html您的错误类型可能是Box<dyn Error + Any>
标签: rust