1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017 年 5 月 15 日 |
---|
在 #io-error 中排名 52
每月下载量 41
7KB
85 行(不含注释)
处理棘手错误处理情况的工具
此crate提供ResultIterExt
trait,该trait提供将Result<T>
类型的集合转换为T
类型的集合的便利性,同时正确处理错误。
使用此库的基本方法是在任何Result
迭代器上调用fail_fast_if_err()?
,以“解包”所有单个元素,返回遇到的第一个错误。
请注意,尽管此方法从迭代器中链式调用,并产生一个新的迭代器,但在返回之前会清空前一个迭代器,并且需要与原始迭代器返回的元素成比例的临时存储。
示例
将文件目录读取为String
,在第一个错误处停止,并在必要时返回它。
extern crate result_iter;
use result_iter::ResultIterExt;
use std::io::{self, Read, BufReader};
use std::fs::{self, File};
fn run() -> Result<Vec<String>, io::Error> {
// Read a directory of files into a Vec, where each
// file my generate an error
let maybe_strings;
maybe_strings = fs::read_dir(".")?
.map(|dirent| {
dirent.and_then(|d| File::open(d.path()))
.and_then(|f| {
let mut f = BufReader::new(f);
let mut s = String::new();
f.read_to_string(&mut s)?;
Ok(s)})
});
// As soon as we encounter an error, return it.
// Otherwise return a Vec<String>
let strings = maybe_strings.fail_fast_if_err()?.collect();
Ok(strings)
}
fn main() {
let _ = run();
}
将文件目录读取为String
,在第一个错误后继续,并返回所有错误。
extern crate result_iter;
use result_iter::{ResultIterExt, MultiError};
use std::io::{self, Read, BufReader};
use std::fs::{self, File};
fn run() -> Result<Vec<String>, MultiError<io::Error>> {
// Read a directory of files into a Vec, where each
// file my generate an error
let maybe_strings;
maybe_strings = fs::read_dir(".")
// Map io::Error to MultiError<io::Error> to satisfy
// the example return type.
.map_err(|e| MultiError::new(vec![e]))?
.map(|dirent| {
dirent.and_then(|d| File::open(d.path()))
.and_then(|f| {
let mut f = BufReader::new(f);
let mut s = String::new();
f.read_to_string(&mut s)?;
Ok(s)})
});
let maybe_strings = maybe_strings.collect::<Vec<_>>();
let maybe_strings = maybe_strings.into_iter();
// As soon as we encounter an error, return it.
// Otherwise return a Vec<String>
let strings = maybe_strings.fail_slow_if_err()?.collect();
Ok(strings)
}
fn main() {
let _ = run();
}