use super::*; // A struct used for serializing / deserializing world #[derive(Debug, Serialize, Deserialize)] pub struct WorldDefinition { pub tasks: HashMap, pub calendars: HashMap, #[serde(default)] pub variables: VarMap, #[serde(default)] pub output_options: TaskOutputOptions, } impl WorldDefinition { pub fn taskset(&self) -> Result { // 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 = 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) } }