loco_extras/initializers/
multi_db.rs

1use async_trait::async_trait;
2use axum::{Extension, Router as AxumRouter};
3use loco_rs::{db, errors::Error, prelude::*};
4
5#[allow(clippy::module_name_repetitions)]
6pub struct MultiDbInitializer;
7
8#[async_trait]
9impl Initializer for MultiDbInitializer {
10    fn name(&self) -> String {
11        "multi-db".to_string()
12    }
13
14    async fn after_routes(&self, router: AxumRouter, ctx: &AppContext) -> Result<AxumRouter> {
15        let settings = ctx
16            .config
17            .initializers
18            .clone()
19            .ok_or_else(|| Error::Message("settings config not configured".to_string()))?;
20
21        let multi_db = settings
22            .get("multi_db")
23            .ok_or_else(|| Error::Message("multi_db not configured".to_string()))?;
24
25        let multi_db = db::MultiDb::new(serde_json::from_value(multi_db.clone())?).await?;
26        Ok(router.layer(Extension(multi_db)))
27    }
28}