summaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.rs')
-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.