loco_extras/initializers/
extra_db.rs1use 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}