loco_extras/initializers/
extra_db.rs

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