use std::{ collections::{HashMap, HashSet}, fmt::Display, }; use serde::{Deserialize, Serialize}; use crate::string_hash::*; #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)] pub struct TaskID { pub recipe: String, pub task: String, } impl Display for TaskID { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}:{}", self.recipe, self.task) } } #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] pub enum Dependency { Fetch { name: String, target_dir: String, sha256: StringHash, }, Task { output: ArchiveHash, path: String, }, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Task { pub label: String, pub command: String, pub workdir: String, pub rootfs: ArchiveHash, pub inherit: Vec, pub depends: HashSet, pub outputs: HashMap, pub pins: HashMap, pub force_run: bool, } #[derive(Clone, Debug, Deserialize, Serialize, Default)] pub struct TaskOutput { pub input_hash: Option, pub layer: Option, pub outputs: HashMap, }