我已经在从CSV文件读取的模块中实现了自定义错误类。由于读取文件时可能会发生不同的错误,因此我为代码中可能发生的所有类型的错误实现了std::convert::From
。但是,鉴于我自己不需要有关错误的任何信息,我希望我可以只实现From<Error>
(或使用更简化的方法)。
这是实现自定义错误的代码:
#[derive(Debug)]
pub struct ParseError {
kind: ParseErrorKind,
message: String,
}
#[derive(Eq, PartialEq, Hash, Debug)]
pub enum ParseErrorKind {
Untracked,
TrackedError1,
TrackedError2,
TrackedErrorN,
}
impl std::convert::From<std::num::ParseIntError> for ParseError {
fn from(error: std::num::ParseIntError) -> Self {
ParseError {
kind: ParseErrorKind::Untracked,
message: error.to_string(),
}
}
}
impl std::convert::From<std::num::ParseFloatError> for ParseError {
fn from(error: std::num::ParseFloatError) -> Self {
ParseError {
kind: ParseErrorKind::Untracked,
message: error.to_string(),
}
}
}
它是在解析CSV记录的函数中生成的:
fn from_record(rec: &HashMap<String, String>) -> Result<Info, ParseError> {
Ok(Info {
field: rec["column"].parse::<u32>()?,
})
}
然后我使用loader函数中的错误来计算跟踪的错误:
// let error_counts: HashMap<ParseErrorKind, u64>;
let info = match Info::from_record(&record) {
Ok(i) => i,
Err(e) => {
*error_counts.entry(e.kind).or_insert(0) += 1;
continue;
}
};
是否有实现std::convert::From<std::convert::Error>
的方法,或者还有其他简化的方法吗?