by_loco/initializers/
multi_db.rs

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