feat(bootstrap): composition root with Config + factory.rs
This commit is contained in:
36
crates/bootstrap/src/config.rs
Normal file
36
crates/bootstrap/src/config.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
/// All configuration read from environment variables at startup.
|
||||
pub struct Config {
|
||||
pub database_url: String,
|
||||
pub jwt_secret: String,
|
||||
pub base_url: String,
|
||||
pub nats_url: Option<String>,
|
||||
pub port: u16,
|
||||
pub allow_registration: bool,
|
||||
/// true when RUST_ENV != "production" — enables AP debug mode
|
||||
pub debug: bool,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn from_env() -> Self {
|
||||
dotenvy::dotenv().ok();
|
||||
Self {
|
||||
database_url: std::env::var("DATABASE_URL")
|
||||
.expect("DATABASE_URL is required"),
|
||||
jwt_secret: std::env::var("JWT_SECRET")
|
||||
.expect("JWT_SECRET is required"),
|
||||
base_url: std::env::var("BASE_URL")
|
||||
.unwrap_or_else(|_| "http://localhost:3000".into()),
|
||||
nats_url: std::env::var("NATS_URL").ok(),
|
||||
port: std::env::var("PORT")
|
||||
.ok()
|
||||
.and_then(|p| p.parse().ok())
|
||||
.unwrap_or(3000),
|
||||
allow_registration: std::env::var("ALLOW_REGISTRATION")
|
||||
.map(|v| v == "true")
|
||||
.unwrap_or(true),
|
||||
debug: std::env::var("RUST_ENV")
|
||||
.map(|v| v != "production")
|
||||
.unwrap_or(true),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user