Use ::fold_defresult() instead of ::fold()

This commit is contained in:
Matthias Beyer 2017-02-26 19:40:59 +01:00
parent ef07c2cba9
commit c8faf5a6a9

View file

@ -20,6 +20,7 @@
use toml::Value; use toml::Value;
use libimagerror::into::IntoError; use libimagerror::into::IntoError;
use libimagutil::iter::FoldResult;
use store::Result; use store::Result;
@ -86,15 +87,11 @@ pub fn config_is_valid(config: &Option<Value>) -> Result<()> {
}) })
.and_then(|t| match *t { .and_then(|t| match *t {
Value::Array(ref a) => { Value::Array(ref a) => {
a.iter().fold(Ok(()), |acc, elem| { a.iter().fold_defresult(|elem| if is_match!(*elem, Value::String(_)) {
acc.and_then(|_| { Ok(())
if is_match!(*elem, Value::String(_)) { } else {
Ok(()) let cause = Box::new(kind.into_error());
} else { Err(SEK::ConfigTypeError.into_error_with_cause(cause))
let cause = Box::new(kind.into_error());
Err(SEK::ConfigTypeError.into_error_with_cause(cause))
}
})
}) })
}, },
_ => { _ => {
@ -125,29 +122,27 @@ pub fn config_is_valid(config: &Option<Value>) -> Result<()> {
}) })
.and_then(|section_table| match *section_table { // which is .and_then(|section_table| match *section_table { // which is
Value::Table(ref section_table) => // a table Value::Table(ref section_table) => // a table
section_table.iter().fold(Ok(()), |acc, (inner_key, cfg)| { section_table.iter().fold_defresult(|(inner_key, cfg)| {
acc.and_then(|_| { match *cfg {
match *cfg { Value::Table(ref hook_config) => { // are tables
Value::Table(ref hook_config) => { // are tables // with a key
// with a key let hook_aspect_is_valid = try!(hook_config.get(key)
let hook_aspect_is_valid = try!(hook_config.get(key) .map(|hook_aspect| f(&hook_aspect))
.map(|hook_aspect| f(&hook_aspect)) .ok_or(SEK::ConfigKeyMissingError.into_error())
.ok_or(SEK::ConfigKeyMissingError.into_error()) );
);
if !hook_aspect_is_valid { if !hook_aspect_is_valid {
Err(SEK::ConfigTypeError.into_error()) Err(SEK::ConfigTypeError.into_error())
} else { } else {
Ok(()) Ok(())
}
},
_ => {
warn!("Store config expects '{}' to be in '{}.{}', but isn't.",
key, section, inner_key);
Err(SEK::ConfigKeyMissingError.into_error())
} }
},
_ => {
warn!("Store config expects '{}' to be in '{}.{}', but isn't.",
key, section, inner_key);
Err(SEK::ConfigKeyMissingError.into_error())
} }
}) }
}), }),
_ => { _ => {
warn!("Store config expects '{}' to be a Table, but isn't.", section); warn!("Store config expects '{}' to be a Table, but isn't.", section);