catapulte_engine/loader/
mod.rs

1pub mod http;
2pub mod local;
3pub mod prelude;
4
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
7    #[error(transparent)]
8    Local(#[from] local::Error),
9    #[error(transparent)]
10    Http(#[from] http::Error),
11}
12
13#[derive(Clone, Debug, serde::Deserialize)]
14#[serde(tag = "type", rename_all = "kebab-case")]
15pub enum Config {
16    Local(local::Config),
17    Http(http::Config),
18}
19
20impl Default for Config {
21    fn default() -> Self {
22        Self::Local(local::Config::default())
23    }
24}
25
26impl From<Config> for Loader {
27    fn from(value: Config) -> Self {
28        match value {
29            Config::Local(item) => Loader::Local(item.into()),
30            Config::Http(item) => Loader::Http(item.build()),
31        }
32    }
33}
34
35#[derive(Debug)]
36pub enum Loader {
37    Local(local::LocalLoader),
38    Http(http::HttpLoader),
39}
40
41impl Loader {
42    pub async fn find_by_name(&self, name: &str) -> Result<prelude::Template, Error> {
43        match self {
44            Loader::Local(inner) => inner.find_by_name(name).await.map_err(Error::Local),
45            Loader::Http(inner) => inner.find_by_name(name).await.map_err(Error::Http),
46        }
47    }
48}