moduforge_rules_engine/loader/
mod.rs1use std::fmt::Debug;
2use std::future::Future;
3use std::sync::Arc;
4
5use thiserror::Error;
6
7pub use cached::CachedLoader;
8pub use closure::ClosureLoader;
9pub use filesystem::{FilesystemLoader, FilesystemLoaderOptions};
10pub use memory::MemoryLoader;
11pub use noop::NoopLoader;
12
13use crate::model::DecisionContent;
14
15mod cached;
16mod closure;
17mod filesystem;
18mod memory;
19mod noop;
20
21pub type LoaderResult<T> = Result<T, Box<LoaderError>>;
22pub type LoaderResponse = LoaderResult<Arc<DecisionContent>>;
23
24pub trait DecisionLoader {
26 fn load<'a>(
27 &'a self,
28 key: &'a str,
29 ) -> impl Future<Output = LoaderResponse> + 'a;
30}
31
32#[derive(Error, Debug)]
33pub enum LoaderError {
34 #[error("Loader did not find item with key {0}")]
35 NotFound(String),
36 #[error("Loader failed internally on key {key}: {source}.")]
37 Internal {
38 key: String,
39 #[source]
40 source: anyhow::Error,
41 },
42}