Rust 自定义错误类型

示例

use std::error::Error;

use std::fmt;

use std::convert::From;

use std::io::Error as IoError;

use std::str::Utf8Error;

#[derive(Debug)] // Allow the use of "{:?}" format specifier

enum CustomError {

    Io(IoError),

    Utf8(Utf8Error),

    Other,

}

// Allow the use of "{}" format specifier

impl fmt::Display for CustomError {

    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

        match *self {

            CustomError::Io(ref cause) => write!(f, "I/O Error: {}", cause),

            CustomError::Utf8(ref cause) => write!(f, "UTF-8 Error: {}", cause),

            CustomError::Other => write!(f, "未知错误!"),

        }

    }

}

// 允许将此类型视为错误

impl Error for CustomError {

    fn description(&self) -> &str {

        match *self {

            CustomError::Io(ref cause) => cause.description(),

            CustomError::Utf8(ref cause) => cause.description(),

            CustomError::Other => "未知错误!",

        }

    }

    fn cause(&self) -> Option<&Error> {

        match *self {

            CustomError::Io(ref cause) => Some(cause),

            CustomError::Utf8(ref cause) => Some(cause),

            CustomError::Other => None,

        }

    }

}

// 支持将系统错误转换为我们的自定义错误。

// 该特征在“ try!”中使用。

impl From<IoError> for CustomError {

    fn from(cause: IoError) -> CustomError {

        CustomError::Io(cause)

    }

}

impl From<Utf8Error> for CustomError {

    fn from(cause: Utf8Error) -> CustomError {

        CustomError::Utf8(cause)

    }

}

           

以上是 Rust 自定义错误类型 的全部内容, 来源链接: utcz.com/z/330670.html

回到顶部