use reinhardt_core::macros::settings;
use serde::{Deserialize, Serialize};
fn default_engine() -> String {
"cookie".to_string()
}
fn default_cookie_name() -> String {
"sessionid".to_string()
}
fn default_cookie_age() -> u64 {
1209600
}
fn default_cookie_httponly() -> bool {
true
}
fn default_cookie_samesite() -> String {
"lax".to_string()
}
#[settings(fragment = true, section = "session")]
#[non_exhaustive]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SessionSettings {
#[serde(default = "default_engine")]
pub engine: String,
#[serde(default = "default_cookie_name")]
pub cookie_name: String,
#[serde(default = "default_cookie_age")]
pub cookie_age: u64,
pub cookie_secure: bool,
#[serde(default = "default_cookie_httponly")]
pub cookie_httponly: bool,
#[serde(default = "default_cookie_samesite")]
pub cookie_samesite: String,
}
impl Default for SessionSettings {
fn default() -> Self {
Self {
engine: "cookie".to_string(),
cookie_name: "sessionid".to_string(),
cookie_age: 1209600, cookie_secure: false,
cookie_httponly: true,
cookie_samesite: "lax".to_string(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::settings::fragment::SettingsFragment;
use rstest::rstest;
#[rstest]
fn test_session_section_name() {
let section = SessionSettings::section();
assert_eq!(section, "session");
}
#[rstest]
fn test_session_default_values() {
let settings = SessionSettings::default();
assert_eq!(settings.engine, "cookie");
assert_eq!(settings.cookie_name, "sessionid");
assert_eq!(settings.cookie_age, 1209600);
assert!(!settings.cookie_secure);
assert!(settings.cookie_httponly);
assert_eq!(settings.cookie_samesite, "lax");
}
}