From faf1624a19ed0e017e5d4715ce5ced1c516fd30a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 6 Apr 2024 12:02:44 +0200 Subject: driver: recipe: use separate structs for recipe and subrecipe reading Subrecipes don't have a meta section. --- crates/driver/src/recipe.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'crates') diff --git a/crates/driver/src/recipe.rs b/crates/driver/src/recipe.rs index 3d3f847..bf8ab99 100644 --- a/crates/driver/src/recipe.rs +++ b/crates/driver/src/recipe.rs @@ -1,7 +1,7 @@ use std::{collections::HashMap, ffi::OsStr, fs::File, path::Path, result}; use scoped_tls_hkt::scoped_thread_local; -use serde::{Deserialize, Deserializer}; +use serde::{de::DeserializeOwned, Deserialize, Deserializer}; use walkdir::WalkDir; use common::{error::*, types::*}; @@ -37,14 +37,19 @@ struct Recipe { pub tasks: HashMap, } -fn read_recipe(path: &Path) -> Result { +#[derive(Debug, Deserialize)] +struct Subrecipe { + pub tasks: HashMap, +} + +fn read_yaml(path: &Path) -> Result { let f = File::open(path).context("IO error")?; - let recipe: Recipe = serde_yaml::from_reader(f) + let value: T = serde_yaml::from_reader(f) .map_err(Error::new) .context("YAML error")?; - Ok(recipe) + Ok(value) } const RECIPE_NAME: &str = "build"; @@ -82,7 +87,7 @@ fn read_recipe_tasks( basename: &str, tasks: &mut HashMap>, ) -> Result { - let recipe_def = CURRENT_RECIPE.set(basename, || read_recipe(path))?; + let recipe_def = CURRENT_RECIPE.set(basename, || read_yaml::(path))?; let name = recipe_def .meta @@ -112,7 +117,7 @@ fn read_subrecipe_tasks( tasks: &mut HashMap>, ) -> Result<()> { let recipe = format!("{basename}/{recipename}"); - let recipe_def = CURRENT_RECIPE.set(&recipe, || read_recipe(path))?; + let recipe_def = CURRENT_RECIPE.set(&recipe, || read_yaml::(path))?; let name = recipe_meta.name.as_deref().unwrap_or(basename).to_string(); -- cgit v1.2.3