use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct SessionStateServerConfig {
pub backend: String,
pub default_ttl_secs: u64,
pub evict_interval_secs: u64,
}
impl Default for SessionStateServerConfig {
fn default() -> Self {
Self {
backend: "memory".to_string(),
default_ttl_secs: 3600,
evict_interval_secs: 300,
}
}
}
impl SessionStateServerConfig {
pub fn validate(&self) -> Result<(), String> {
match self.backend.as_str() {
"memory" | "postgres" => {},
other => {
return Err(format!(
"[session_state] backend = \"{other}\" is not supported — use \"memory\" \
(volatile, development) or \"postgres\" (durable)."
));
},
}
if self.default_ttl_secs == 0 {
return Err("[session_state] default_ttl_secs must be at least 1 — a zero TTL would \
make every write instantly invisible."
.to_string());
}
if self.evict_interval_secs == 0 {
return Err("[session_state] evict_interval_secs must be at least 1.".to_string());
}
Ok(())
}
}