diff options
Diffstat (limited to 'crates/rebel-resolve/src/task.rs')
-rw-r--r-- | crates/rebel-resolve/src/task.rs | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/crates/rebel-resolve/src/task.rs b/crates/rebel-resolve/src/task.rs new file mode 100644 index 0000000..1220d45 --- /dev/null +++ b/crates/rebel-resolve/src/task.rs @@ -0,0 +1,101 @@ +use std::collections::{HashMap, HashSet}; + +use serde::Deserialize; + +use rebel_common::{string_hash::StringHash, types::TaskIDRef}; + +use crate::args::{ArgMapping, ArgType, TaskArgs}; + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)] +pub struct TaskDep { + pub recipe: Option<String>, + pub task: String, + #[serde(default)] + pub args: ArgMapping, +} + +impl TaskDep { + pub fn id<'a>(&'a self, recipe: &'a str) -> TaskIDRef<'a> { + let recipe = self.recipe.as_deref().unwrap_or(recipe); + let task = &self.task; + TaskIDRef { recipe, task } + } +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)] +pub struct Fetch { + pub name: String, + pub sha256: StringHash, +} + +fn default_output_name() -> String { + "default".to_string() +} + +#[derive(Clone, Debug, Deserialize)] +pub struct ParentDep { + #[serde(flatten)] + pub dep: TaskDep, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)] +pub struct OutputDep { + #[serde(flatten)] + pub dep: TaskDep, + #[serde(default)] + pub noinherit: bool, + #[serde(default = "default_output_name")] + pub output: String, +} + +#[derive(Clone, Debug, Deserialize, Default)] +pub struct Output { + pub path: Option<String>, + #[serde(default)] + pub runtime_depends: HashSet<OutputDep>, +} + +#[derive(Clone, Debug, Deserialize, Default)] +pub struct Action { + #[serde(default)] + pub run: String, +} + +impl Action { + pub fn is_empty(&self) -> bool { + self.run.is_empty() + } +} + +#[derive(Clone, Debug, Default)] +pub struct TaskMeta { + pub basename: String, + pub recipename: String, + pub recipe: String, + pub name: String, + pub version: Option<String>, +} + +#[derive(Clone, Debug, Deserialize, Default)] +pub struct TaskDef { + #[serde(skip)] + pub meta: TaskMeta, + #[serde(default)] + pub args: HashMap<String, ArgType>, + #[serde(default)] + pub parent: Option<ParentDep>, + #[serde(default)] + pub fetch: HashSet<Fetch>, + #[serde(default)] + pub build_depends: HashSet<OutputDep>, + #[serde(default)] + pub depends: HashSet<OutputDep>, + #[serde(default)] + pub output: HashMap<String, Output>, + #[serde(flatten)] + pub action: Action, + #[serde(default)] + pub priority: i32, + #[serde(skip)] + pub arg_match: TaskArgs, +} |