2 个版本
使用旧的 Rust 2015
0.1.1 | 2017年7月25日 |
---|---|
0.1.0 | 2017年7月24日 |
#2049 在 Rust 模式
21KB
265 行
NES
新错误系统是 Rust 的库,它使错误处理的语法更优雅。
描述
- 它使用 Rust 的稳定版本
- 每个错误都存储了错误发生的位置,因为一些错误如 std::io::Error 可能会在代码的不同位置发生,这对问题检测很有用。
- 这里收集了一些宏,使语法更优雅和简洁。
- 你可以使用自己的 ErrorInfo,它存储错误发生的位置信息。
错误信息
显示 ({})
example/examples/example.rs 16:0 //line, where impl_from_error!() is.
read file error example/examples/example.rs 51:13 //line where thr error has been occurred
Can not read file "no_file.rs" : No such file or directory (os error 2) //description of error
调试 ({:?})
example/examples/example.rs 18:0
CommonError::ReadFileError read_file_error:example/examples/example.rs 53:13
ReadFileError::ReadFileError io_error:Error { repr: Os { code: 2, message: "No such file or directory" } } file:"no_file.rs"
如果你有想法,请在 Issues 中提出。
用法
Cargo.toml
nes = "*"
//See examples/example.rs
define_error!( ReadFileError,
IOError(io_error:Box<std::io::Error>) => "IO Error: {}",
ReadFileError(io_error:Box<std::io::Error>, file:String ) => "Can not read file \"{2}\" : {1}" //1,2 is order of args, note:0 is ErrorInfo
);
define_error!( CommonError,
ReadFileError(read_file_error:Box<ReadFileError>) => "read file error {}",
NoArguments() => "no arguments",
IncorrectExtension(file_name:String, extension:String) => "Expected extension \"{2}\" for file \"{1}\""
);
impl_from_error!(ReadFileError => CommonError);
fn process() -> result![CommonError] {
let lines=read_file("file.rs")?;
for line in lines.iter() {
print!("L:{}",line);
}
ok!()
}
fn read_file(file_name:String) -> result![Vec<String>,ReadFileError] {
use std::io::prelude::*;
let file=try!( std::fs::File::open(file_name.as_str()), ReadFileError::ReadFileError, file_name );
let mut buf_reader = std::io::BufReader::new(file);
let mut lines=Vec::new();
let mut line=String::with_capacity(80);
loop {
match try!( buf_reader.read_line(&mut line), ReadFileError::IOError ) {
0 => break,
_ => lines.push(line.clone()),
}
line.clear();
}
ok!(lines)
}
许可证
MIT