moduforge_rules_engine/loader/
mod.rs

1use 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
24/// Trait used for implementing a loader for decisions
25pub 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}