summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-10-03 22:18:42 +0300
committerLars Wirzenius <liw@liw.fi>2019-10-03 22:18:42 +0300
commit03cb997269576b902596121e2650605ef57c4385 (patch)
treee1724ede01b9ddb21586467d20269914c7b8a9ef
parentc2580f9361d0f4d08b4ad77f999860c5c673c3b8 (diff)
downloadroadmap-03cb997269576b902596121e2650605ef57c4385.tar.gz
Change: handle depends not being a list of names in parsing
-rw-r--r--src/parser.rs20
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.