From 03cb997269576b902596121e2650605ef57c4385 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 3 Oct 2019 22:18:42 +0300 Subject: Change: handle depends not being a list of names in parsing --- src/parser.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 8b0dc05..637220c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -34,7 +34,7 @@ fn step_from_value(name: &str, value: &Value) -> ParseResult { let mut step = Step::new(name, label); step.set_status(status); - for depname in parse_depends(&value).iter() { + for depname in parse_depends(&value)?.iter() { step.add_dependency(depname); } @@ -45,20 +45,26 @@ fn step_from_value(name: &str, value: &Value) -> ParseResult { } // Get a sequence of depenencies. -fn parse_depends(map: &Value) -> Vec<&str> { +fn parse_depends(map: &Value) -> ParseResult> { let key_name = "depends"; let key = Value::String(key_name.to_string()); let mut depends: Vec<&str> = vec![]; + let need_list_of_names = format!("'depends' must be a list of step names"); - if let Some(Value::Sequence(deps)) = map.get(&key) { - for depname in deps.iter() { - if let Value::String(depname) = depname { - depends.push(depname); + match map.get(&key) { + None => (), + Some(Value::Sequence(deps)) => { + for depname in deps.iter() { + match depname { + Value::String(depname) => depends.push(depname), + _ => return Err(need_list_of_names), + } } } + _ => return Err(need_list_of_names), } - depends + Ok(depends) } // Get label string from a Mapping element, or empty string. -- cgit v1.2.1