Files
waterfall/src/world.rs
T

41 lines
1.1 KiB
Rust

use super::*;
// A struct used for serializing / deserializing world
#[derive(Debug, Serialize, Deserialize)]
pub struct WorldDefinition {
pub tasks: HashMap<String, TaskDefinition>,
pub calendars: HashMap<String, Calendar>,
#[serde(default)]
pub variables: VarMap,
#[serde(default)]
pub output_options: TaskOutputOptions,
}
impl WorldDefinition {
pub fn taskset(&self) -> Result<TaskSet> {
// Ensure all tasks reference a valid calendar
for (name, def) in self.tasks.iter() {
if !self.calendars.contains_key(&def.calendar_name) {
return Err(anyhow!(
"Task {} references calendar {}, which is not defined",
name,
def.calendar_name
));
}
}
let tasks: Vec<Task> = self
.tasks
.iter()
.map(|(tn, td)| td.to_task(tn, self.calendars.get(&td.calendar_name).unwrap()))
.collect();
let ts = TaskSet::from(tasks);
ts.validate()?;
Ok(ts)
}
}