为ParseIntError实现From trait

时间:2015-07-14 11:25:58

标签: rust traits

使用试试时!宏,它使用From trait将错误转换为所需的错误。

我想将一些错误转换为我自己的类型。这对于例如io ::错误,但我不能让它从核心的错误类型中工作。

use std::io;

pub struct ParserError {
    pub message: String,
}

impl From<io::Error> for ParserError {
    fn from(e: io::Error) -> ParserError {
        ParserError{message: format!("Generic IO error: {}", e.description())}
    }
}

这很适合尝试!在任何事情上。但现在解析:

fn parse_string(s: &str) -> Result<u64, ParserError> {
    let i = try!(s.parse::<u64>());
    return Ok(i);
}

我的错误说:

错误:未对类型`core :: num :: ParseIntError

实现特征core::convert::From<parser::ParserError>

我试图实现这个来自:

impl From<core::num::ParseIntError> for ParserError {
    fn from(_: core::num::ParseIntError) -> ParserError {
        ParserError{message: "Invalid data type".to_string()}
    }
}

但我无法获得核心导入。怎么做?

1 个答案:

答案 0 :(得分:4)

来自core的模块由std重新导出。您只需在代码中将core替换为std即可修复错误:

impl From<std::num::ParseIntError> for ParserError {
    fn from(_: std::num::ParseIntError) -> ParserError {
        ParserError{message: "Invalid data type".to_string()}
    }
}