summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-09-20 10:22:39 +0300
committerLars Wirzenius <liw@liw.fi>2019-09-20 10:22:39 +0300
commitbd6cbcd8aaa2bff6f611e73c66ba0affdf67f134 (patch)
treee0e34e3e062a211d0d6fe1084a2cd3df4e97445a /src
parent133228357f8cf62f29ad85cc23ad1590ef2ca4e9 (diff)
downloadroadmap-bd6cbcd8aaa2bff6f611e73c66ba0affdf67f134.tar.gz
Change: parse dependency lists in yaml
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 3fa9d38..9d45ca4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -108,10 +108,20 @@ impl Roadmap {
// Convert a Value into a Step, if possible.
fn step_from_value(name: &str, value: &Value) -> Result<Step, &'static str> {
let label_key = Value::String("label".to_string());
+ let deps_key = Value::String("depends".to_string());
+
match value {
Value::Mapping(map) => {
if let Some(Value::String(label)) = map.get(&label_key) {
- return Ok(Step::new(name, label));
+ let mut step = Step::new(name, label);
+ if let Some(Value::Sequence(deps)) = map.get(&deps_key) {
+ for depname in deps.iter() {
+ if let Value::String(depname) = depname {
+ step.add_dependency(depname);
+ }
+ }
+ }
+ return Ok(step);
}
Ok(Step::new(name, ""))
},
@@ -277,9 +287,13 @@ second:
let first = roadmap.get_step("first").unwrap();
assert_eq!(first.name(), "first");
assert_eq!(first.label(), "the first step");
+ let deps: Vec<&String> = first.dependencies().collect();
+ assert_eq!(deps.len(), 0);
let second = roadmap.get_step("second").unwrap();
assert_eq!(second.name(), "second");
assert_eq!(second.label(), "the second step");
+ let deps: Vec<&String> = second.dependencies().collect();
+ assert_eq!(deps, vec!["first"]);
}
}