use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct DatabaseConfig {
pub url: String,
pub max_connections: u32,
pub min_connections: u32,
pub connect_timeout_secs: u64,
pub query_timeout_secs: u64,
pub idle_timeout_secs: u64,
pub ssl_mode: SslMode,
pub mutation_timing: MutationTimingConfig,
}
impl Default for DatabaseConfig {
fn default() -> Self {
Self {
url: String::new(),
max_connections: 10,
min_connections: 1,
connect_timeout_secs: 10,
query_timeout_secs: 30,
idle_timeout_secs: 600,
ssl_mode: SslMode::Prefer,
mutation_timing: MutationTimingConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MutationTimingConfig {
pub enabled: bool,
#[serde(default = "default_timing_variable")]
pub variable_name: String,
}
fn default_timing_variable() -> String {
"fraiseql.started_at".to_string()
}
impl Default for MutationTimingConfig {
fn default() -> Self {
Self {
enabled: false,
variable_name: default_timing_variable(),
}
}
}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
#[non_exhaustive]
pub enum SslMode {
Disable,
#[default]
Prefer,
Require,
VerifyCa,
VerifyFull,
}