我正在编写一个可以返回几个不同错误中的几个错误的函数.
fn foo(...) -> Result<..., MyError> {}
Run Code Online (Sandbox Code Playgroud)
我可能需要定义自己的错误类型来表示这样的错误.我假设这可能是一个enum错误,一些enum变种附带了诊断数据:
enum MyError {
GizmoError,
WidgetNotFoundError(widget_name: String)
}
Run Code Online (Sandbox Code Playgroud)
这是最惯用的方式吗?我该如何实现这个Error特性?
这是我的测试代码:
use std::error::Error;
use std::fmt;
struct Handler {
error: String
}
#[derive(Debug)]
struct SpecificError;
impl fmt::Display for SpecificError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "SpecificError")
}
}
impl Error for SpecificError {}
impl<E: Error> From<E> for Handler {
fn from(e: E) -> Self {
Handler { error: format!("{}", e) }
}
}
fn fail1() -> Result<(), SpecificError> {
Err(SpecificError)
}
fn fail2() -> Result<(), Box<Error>> {
Err(Box::new(SpecificError))
}
fn handler() -> Result<(), Handler> {
fail1()?;
fail2()?; …Run Code Online (Sandbox Code Playgroud)