use sim_cookbook::{EmbeddedDir, RecipeStore};
use sim_kernel::{Cx, Error, Result};
pub const SEEDED_RECIPE_BOOKS: &[(&str, EmbeddedDir)] = &[
("core", sim_lib_core::RECIPES),
("codec/lisp", sim_codec_lisp::RECIPES),
("codec/json", sim_codec_json::RECIPES),
("numbers/f64", sim_lib_numbers_f64::RECIPES),
("numbers/complex", sim_lib_numbers_complex::RECIPES),
("numbers/func", sim_lib_numbers_func::RECIPES),
("numbers/cas", sim_lib_numbers_cas::RECIPES),
("numbers/rational", sim_lib_numbers_rational::RECIPES),
("numbers/i64", sim_lib_numbers_i64::RECIPES),
("numbers/arith", sim_lib_numbers_arith::RECIPES),
("numbers/bigint", sim_lib_numbers_bigint::RECIPES),
("numbers/bool", sim_lib_numbers_bool::RECIPES),
("numbers/tensor", sim_lib_numbers_tensor::RECIPES),
("numbers/tensor-cmplxf", sim_lib_numbers_tensor_cmplxf::RECIPES),
("numbers/tensor-rat64", sim_lib_numbers_tensor_rat64::RECIPES),
("organ/binding", sim_lib_binding::RECIPES),
("organ/dispatch", sim_lib_dispatch::RECIPES),
("stream-core-shapes", sim_lib_stream_core::RECIPES),
("agent-runner-core", sim_lib_agent_runner_core::RECIPES),
];
pub fn seeded_recipe_store() -> Result<RecipeStore> {
let mut store = RecipeStore::new();
for (book, recipes) in SEEDED_RECIPE_BOOKS {
store
.register_book(recipes)
.map_err(|err| Error::Eval(format!("seed recipe book {book}: {err}")))?;
}
Ok(store)
}
pub fn install_seeded_cookbook_lib(cx: &mut Cx) -> Result<()> {
crate::runtime::install_cookbook_lib(cx, seeded_recipe_store()?)
}