From 6c2a2d7f0b65ab0bf7da35b871697abde5b075e1 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 17 Jul 2019 19:47:58 +0200 Subject: Rewrite function to be more rusty Signed-off-by: Matthias Beyer --- src/git.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/git.rs b/src/git.rs index 35b3dbf..daaceb0 100644 --- a/src/git.rs +++ b/src/git.rs @@ -34,19 +34,17 @@ pub fn crawl_git_tree>(path: P) -> io::Result> { pub fn parse_ls_tree_output<'a>(output: &'a [u8]) -> Result>, Utf8Error> { let re = Regex::new(r"^[^ ]+ [^ ]+ ([^\t]+)\t(.+)$").unwrap(); - let mut blobs = Vec::new(); - for line in output.split(|&byte| byte == 0) { - let line = str::from_utf8(line)?; - - if let Some(captures) = re.captures(line) { - blobs.push(Blob { - object: captures.get(1).unwrap().as_str(), - path: Path::new(captures.get(2).unwrap().as_str()), - }) - } - } - - Ok(blobs) + output.split(|byte| *byte == 0) + .map(str::from_utf8) + .filter_map(|r_l| match r_l { + Err(e) => Some(Err(e)), + Ok(l) => re.captures(l).map(Ok), + }) + .map(|r_captures| r_captures.map(|captures| Blob { + object: captures.get(1).unwrap().as_str(), + path: Path::new(captures.get(2).unwrap().as_str()), + })) + .collect() } #[cfg(test)] -- cgit v1.2.3