summaryrefslogtreecommitdiffstats
path: root/crates/rebel-resolve/src/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rebel-resolve/src/task.rs')
-rw-r--r--crates/rebel-resolve/src/task.rs101
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,
+}