diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-02-21 19:24:54 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-02-21 19:24:54 +0100 |
commit | 391ae705356a382d40172ee32e525797d41b68db (patch) | |
tree | ae52b339a7929a2b4181415119f61cf7b65c5c34 | |
parent | 90884a91680deddbde9c58071e3807e03ab478df (diff) |
Shrink iteration to collect ids and then print rather than three steps
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | bin/domain/imag-mail/src/lib.rs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/bin/domain/imag-mail/src/lib.rs b/bin/domain/imag-mail/src/lib.rs index 03a1a1b6..b2f597b2 100644 --- a/bin/domain/imag-mail/src/lib.rs +++ b/bin/domain/imag-mail/src/lib.rs @@ -201,8 +201,8 @@ fn list(rt: &Runtime) -> Result<()> { where I: Iterator<Item = Result<FileLockEntry<'a>>> { debug!("Processing tree"); - let iter = if find_root { - let iter = iter.and_then_ok(|fle| { + let ids : Vec<_> = if find_root { + iter.and_then_ok(|fle| { trace!("Loading: {}", fle.get_location()); let id = fle .load(conn)? @@ -214,18 +214,17 @@ fn list(rt: &Runtime) -> Result<()> { drop(fle); id - }); - - Box::new(iter) as Box<dyn Iterator<Item = Result<String>>> + }) + .and_then_ok(|id: String| mailstore.get_mailtree(&id)) + .collect::<Result<Vec<Mailtree>>>() } else { - let iter = iter.and_then_ok(|fle| fle.get_cached_id()); - Box::new(iter) as Box<dyn Iterator<Item = Result<String>>> - }; + iter.and_then_ok(|fle| fle.get_cached_id()) + .and_then_ok(|id: String| mailstore.get_mailtree(&id)) + .collect::<Result<Vec<Mailtree>>>() + }?; trace!("Getting mailtree now!"); - iter.and_then_ok(|id: String| mailstore.get_mailtree(&id)) - .collect::<Result<Vec<Mailtree>>>()? - .into_iter() + ids.into_iter() .map(|mt| print_traverse(&mailstore, mt, i, conn, list_format, rt, out)) .collect::<Result<Vec<_>>>() .map(|_| ()) |