use std::collections::BTreeMap;
use crate::db::{DbFieldType, DbValue};
use super::cookies::CookieCacheOptions;
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SessionOptions {
pub expires_in: Option<u64>,
pub update_age: Option<u64>,
pub fresh_age: Option<u64>,
pub cookie_cache: CookieCacheOptions,
pub additional_fields: BTreeMap<String, SessionAdditionalField>,
}
impl SessionOptions {
pub fn new() -> Self {
Self::default()
}
pub fn builder() -> Self {
Self::new()
}
#[must_use]
pub fn expires_in(mut self, expires_in: u64) -> Self {
self.expires_in = Some(expires_in);
self
}
#[must_use]
pub fn update_age(mut self, update_age: u64) -> Self {
self.update_age = Some(update_age);
self
}
#[must_use]
pub fn fresh_age(mut self, fresh_age: u64) -> Self {
self.fresh_age = Some(fresh_age);
self
}
#[must_use]
pub fn cookie_cache(mut self, cookie_cache: CookieCacheOptions) -> Self {
self.cookie_cache = cookie_cache;
self
}
#[must_use]
pub fn additional_field(
mut self,
name: impl Into<String>,
field: SessionAdditionalField,
) -> Self {
self.additional_fields.insert(name.into(), field);
self
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct SessionAdditionalField {
pub field_type: DbFieldType,
pub required: bool,
pub input: bool,
pub returned: bool,
pub default_value: Option<DbValue>,
pub db_name: Option<String>,
}
impl SessionAdditionalField {
pub fn new(field_type: DbFieldType) -> Self {
Self {
field_type,
required: true,
input: true,
returned: true,
default_value: None,
db_name: None,
}
}
#[must_use]
pub fn optional(mut self) -> Self {
self.required = false;
self
}
#[must_use]
pub fn generated(mut self) -> Self {
self.input = false;
self
}
#[must_use]
pub fn hidden(mut self) -> Self {
self.returned = false;
self
}
#[must_use]
pub fn default_value(mut self, value: DbValue) -> Self {
self.default_value = Some(value);
self
}
#[must_use]
pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
self.db_name = Some(db_name.into());
self
}
}