summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-02-21 19:24:54 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-02-21 19:24:54 +0100
commit391ae705356a382d40172ee32e525797d41b68db (patch)
treeae52b339a7929a2b4181415119f61cf7b65c5c34
parent90884a91680deddbde9c58071e3807e03ab478df (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.rs21
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(|_| ())