63 lines
2.1 KiB
Rust
63 lines
2.1 KiB
Rust
use config::{Config, ConfigError};
|
|
use tracing::warn;
|
|
|
|
use super::{
|
|
FromConfig,
|
|
key::{DATABASE_MAX_CONNECTIONS_KEY, DATABASE_MIGRATE_ON_STARTUP_KEY},
|
|
};
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct DatabaseSettings {
|
|
pub url: String,
|
|
pub max_connections: u32,
|
|
pub migrate_on_startup: bool,
|
|
}
|
|
|
|
impl FromConfig for DatabaseSettings {
|
|
fn from_config(_config: &Config) -> Result<Self, String> {
|
|
Ok(DatabaseSettings {
|
|
url: _config
|
|
.get_string(super::key::DATABASE_URL_KEY)
|
|
.map_err(|op| match op {
|
|
ConfigError::NotFound(_) => "Database URL not found in configuration".into(),
|
|
err => {
|
|
format!("Failed to read Database URL from configuration {err}")
|
|
}
|
|
})?,
|
|
max_connections: _config
|
|
.get_int(DATABASE_MAX_CONNECTIONS_KEY)
|
|
.unwrap_or_else(|err| {
|
|
const DEFAULT_MAX_CONNECTIONS: i64 = 10;
|
|
warn!(
|
|
"{} not set or invalid in configuration, defaulting to {}. Error: {}",
|
|
DATABASE_MAX_CONNECTIONS_KEY, DEFAULT_MAX_CONNECTIONS, err
|
|
);
|
|
DEFAULT_MAX_CONNECTIONS
|
|
}) as u32,
|
|
migrate_on_startup: _config
|
|
.get_bool(DATABASE_MIGRATE_ON_STARTUP_KEY)
|
|
.unwrap_or_else(|err| {
|
|
const DEFAULT_MIGRATE_ON_STARTUP: bool = true;
|
|
warn!(
|
|
"{} not set or invalid in configuration, defaulting to {}. Error: {}",
|
|
DATABASE_MIGRATE_ON_STARTUP_KEY, DEFAULT_MIGRATE_ON_STARTUP, err
|
|
);
|
|
DEFAULT_MIGRATE_ON_STARTUP
|
|
}),
|
|
})
|
|
}
|
|
|
|
fn validate(&self) -> Result<(), String> {
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
fn mock() -> Self {
|
|
DatabaseSettings {
|
|
url: "sqlite::memory:".to_string(),
|
|
max_connections: 5,
|
|
migrate_on_startup: true,
|
|
}
|
|
}
|
|
}
|