From 5935d43f09a8d2f7024e6ca24a219cff41070691 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 3 Aug 2016 11:30:23 +0200 Subject: Replace map(unwrap()) with fold() --- libimagentrylink/src/internal.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'libimagentrylink') 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(|_| ()) }) } -- cgit v1.2.3