diff options
author | Lars Wirzenius <liw@liw.fi> | 2019-10-03 22:18:42 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2019-10-03 22:18:42 +0300 |
commit | 03cb997269576b902596121e2650605ef57c4385 (patch) | |
tree | e1724ede01b9ddb21586467d20269914c7b8a9ef | |
parent | c2580f9361d0f4d08b4ad77f999860c5c673c3b8 (diff) | |
download | roadmap-03cb997269576b902596121e2650605ef57c4385.tar.gz |
Change: handle depends not being a list of names in parsing
-rw-r--r-- | src/parser.rs | 20 |
1 files 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<Step> { 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<Step> { } // Get a sequence of depenencies. -fn parse_depends(map: &Value) -> Vec<&str> { +fn parse_depends(map: &Value) -> ParseResult<Vec<&str>> { 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. |