自定义错误流行

自定义错误类型只需要实现DebugDisplay特征即可。

use std::fmt
 
#[derive(Debug)]
struct AppError {
    kind: String,
    message: String,
}
 
impl fmt::Display for AppError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "An Error Occurred, Please Try Again!")
    }
}
 
fn produce_error() -> Result<(), AppError> {
    Err(AppError)
}
 
fn main() {
    match produce_error() {
        Err(e) => eprintln!("{}", e),
        _ => println!("Noe error"),
    }
    eprintln("{:?}", produce_error());
}

转换错误类型

实现std::convert::from特征:

impl From<io::Error> for AppError {
    fn from(error: io::Error) -> Self {
        AppError {
            kind: String::from("io"),
            message: error.toString(),
        }
    }
}

io::Error错误转换为自定义的AppError错误。