chiark / gitweb /
otterlib: Refactor shape library iteration to be less crazy
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 5 May 2021 12:48:08 +0000 (13:48 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 5 May 2021 12:48:08 +0000 (13:48 +0100)
These fallible iter combinators.  Urgh.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otterlib.rs

index 3c0e371f7fbafbd23a6ef40fe30a6eb150a6e239..062ef6193d253f7c3a3c6f707d7d40f61b84e886 100644 (file)
@@ -231,25 +231,15 @@ fn main() {
     let tlibs = Config1::PathGlob(libs.to_owned());
     load(&vec![tlibs.clone()])?;
   }
-  let mut items: Vec<ItemForOutput> =
-    libs_list()
-    .into_iter()
-    .map(|lib| {
-      let contents = libs_lookup(&lib)?;
-      let items = opts.items
-        .split(SPLIT)
-        .map(|items| contents.list_glob(items))
-        .collect::<Result<Vec<_>,_>>()?
-        .into_iter()
-        .flatten();
-      Ok::<_,AE>((lib, items))
-    })
-    .collect::<Result<Vec<_>,_>>()?
-    .into_iter()
-    .map(|(lib, items)| {
-      items.into_iter().map(|item| (lib.clone(),item)).collect::<Vec<_>>()
-    }).flatten()
-    .collect();
+  let mut items: Vec<ItemForOutput> = default();
+  for lib in libs_list() {
+    let contents = libs_lookup(&lib)?;
+    for pat in opts.items.split(SPLIT) {
+      for item in contents.list_glob(pat)? {
+        items.push((lib.clone(), item))
+      }
+    }
+  }
   items.sort();
 
   match opts.outkind {