use camino::Utf8Path;
#[derive(Default)]
pub struct RecipeInfo {
#[cfg_attr(not(feature = "server"), allow(dead_code))]
pub sub_refs: Vec<String>,
pub default_servings: Option<u32>,
}
pub fn resolve_recipe_info(base_path: &Utf8Path, recipe_path: &str) -> anyhow::Result<RecipeInfo> {
let entry = crate::util::get_recipe(base_path, recipe_path)?;
let recipe = crate::util::parse_recipe_from_entry(&entry, 1.0)?;
let mut sub_refs = Vec::new();
for ingredient in &recipe.ingredients {
if let Some(ref recipe_ref) = ingredient.reference {
let path = if recipe_ref.components.is_empty() {
recipe_ref.name.clone()
} else {
format!("{}/{}", recipe_ref.components.join("/"), recipe_ref.name)
};
sub_refs.push(path);
}
}
let default_servings = recipe.metadata.servings().and_then(|s| s.as_number());
Ok(RecipeInfo {
sub_refs,
default_servings,
})
}
pub fn ref_info_or_default(base_path: &Utf8Path, lookup: &str, ref_display: &str) -> RecipeInfo {
match resolve_recipe_info(base_path, lookup) {
Ok(info) => info,
Err(e) => {
tracing::warn!(
"Could not resolve referenced recipe '{}': {}",
ref_display,
e
);
RecipeInfo::default()
}
}
}