use serde::{Deserialize, Serialize};
use crate::config::validation::{require_nonempty, require_nonzero};
use crate::errors::OrionError;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct StorageConfig {
pub url: String,
pub max_connections: u32,
pub min_connections: u32,
pub busy_timeout_ms: u64,
pub acquire_timeout_secs: u64,
pub idle_timeout_secs: u64,
pub backup_dir: String,
}
impl Default for StorageConfig {
fn default() -> Self {
Self {
url: "sqlite:orion.db".to_string(),
max_connections: 50,
min_connections: 5,
busy_timeout_ms: 5000,
acquire_timeout_secs: 3,
idle_timeout_secs: 300,
backup_dir: "./backups".to_string(),
}
}
}
impl StorageConfig {
pub(crate) fn validate(&self) -> Result<(), OrionError> {
require_nonempty(&self.url, "storage.url")?;
require_nonzero(self.busy_timeout_ms, "storage.busy_timeout_ms")?;
require_nonzero(self.acquire_timeout_secs, "storage.acquire_timeout_secs")?;
Ok(())
}
}