summaryrefslogtreecommitdiffstats
path: root/libimagentrylink
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-08-03 11:30:23 +0200
committerMatthias Beyer <mail@beyermatthias.de>2016-08-03 11:30:23 +0200
commit5935d43f09a8d2f7024e6ca24a219cff41070691 (patch)
tree0c62a848ba0e335a6da88d581f9e5789d7a1469f /libimagentrylink
parent41bf063a71b431abfa4e35c541386cda4f7bb803 (diff)
Replace map(unwrap()) with fold()
Diffstat (limited to 'libimagentrylink')
-rw-r--r--libimagentrylink/src/internal.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/libimagentrylink/src/internal.rs b/libimagentrylink/src/internal.rs
index 0f5a12ce..6032fe0b 100644
--- a/libimagentrylink/src/internal.rs
+++ b/libimagentrylink/src/internal.rs
@@ -138,14 +138,21 @@ fn add_foreign_link(target: &mut Entry, from: StoreId) -> Result<()> {
target.get_internal_links()
.and_then(|mut links| {
links.push(from);
- let links = links_into_values(links);
- if links.iter().any(|o| o.is_none()) {
- Err(LEK::InternalConversionError.into())
- } else {
- let links = links.into_iter().map(|opt| opt.unwrap()).collect();
- process_rw_result(target.get_header_mut().set("imag.links", Value::Array(links)))
- .map(|_| ())
- }
+ let links = try!(links_into_values(links)
+ .into_iter()
+ .fold(Ok(vec![]), |acc, elem| {
+ acc.and_then(move |mut v| {
+ match elem {
+ None => Err(LEK::InternalConversionError.into()),
+ Some(e) => {
+ v.push(e);
+ Ok(v)
+ },
+ }
+ })
+ }));
+ process_rw_result(target.get_header_mut().set("imag.links", Value::Array(links)))
+ .map(|_| ())
})
}