use serde::Deserialize;
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(default, deny_unknown_fields)]
pub struct DatabaseSection {
pub kind: DatabaseKindSection,
pub url: String,
pub max_connections: u32,
pub connect_timeout_ms: u64,
}
impl Default for DatabaseSection {
fn default() -> Self {
Self {
kind: DatabaseKindSection::Sqlite,
url: "sqlite::memory:".to_string(),
max_connections: 5,
connect_timeout_ms: 5000,
}
}
}
impl DatabaseSection {
#[cfg(feature = "db")]
pub fn to_database_config(&self) -> crate::db::DatabaseConfig {
crate::db::DatabaseConfig {
kind: match self.kind {
DatabaseKindSection::Sqlite => crate::db::DatabaseKind::Sqlite,
DatabaseKindSection::Postgres => crate::db::DatabaseKind::Postgres,
DatabaseKindSection::Mysql => crate::db::DatabaseKind::Mysql,
},
url: self.url.clone(),
max_connections: self.max_connections,
connect_timeout: std::time::Duration::from_millis(self.connect_timeout_ms),
}
}
}
#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum DatabaseKindSection {
#[default]
Sqlite,
Postgres,
Mysql,
}