openauth_core/options/
session.rs1use std::collections::BTreeMap;
2
3use crate::db::{DbFieldType, DbValue};
4
5use super::cookies::CookieCacheOptions;
6
7#[derive(Debug, Clone, PartialEq, Default)]
9pub struct SessionOptions {
10 pub expires_in: Option<u64>,
11 pub update_age: Option<u64>,
12 pub fresh_age: Option<u64>,
13 pub cookie_cache: CookieCacheOptions,
14 pub additional_fields: BTreeMap<String, SessionAdditionalField>,
15}
16
17impl SessionOptions {
18 pub fn new() -> Self {
19 Self::default()
20 }
21
22 pub fn builder() -> Self {
23 Self::new()
24 }
25
26 #[must_use]
27 pub fn expires_in(mut self, expires_in: u64) -> Self {
28 self.expires_in = Some(expires_in);
29 self
30 }
31
32 #[must_use]
33 pub fn update_age(mut self, update_age: u64) -> Self {
34 self.update_age = Some(update_age);
35 self
36 }
37
38 #[must_use]
39 pub fn fresh_age(mut self, fresh_age: u64) -> Self {
40 self.fresh_age = Some(fresh_age);
41 self
42 }
43
44 #[must_use]
45 pub fn cookie_cache(mut self, cookie_cache: CookieCacheOptions) -> Self {
46 self.cookie_cache = cookie_cache;
47 self
48 }
49
50 #[must_use]
51 pub fn additional_field(
52 mut self,
53 name: impl Into<String>,
54 field: SessionAdditionalField,
55 ) -> Self {
56 self.additional_fields.insert(name.into(), field);
57 self
58 }
59}
60
61#[derive(Debug, Clone, PartialEq)]
63pub struct SessionAdditionalField {
64 pub field_type: DbFieldType,
65 pub required: bool,
66 pub input: bool,
67 pub returned: bool,
68 pub default_value: Option<DbValue>,
69 pub db_name: Option<String>,
70}
71
72impl SessionAdditionalField {
73 pub fn new(field_type: DbFieldType) -> Self {
74 Self {
75 field_type,
76 required: true,
77 input: true,
78 returned: true,
79 default_value: None,
80 db_name: None,
81 }
82 }
83
84 #[must_use]
85 pub fn optional(mut self) -> Self {
86 self.required = false;
87 self
88 }
89
90 #[must_use]
91 pub fn generated(mut self) -> Self {
92 self.input = false;
93 self
94 }
95
96 #[must_use]
97 pub fn hidden(mut self) -> Self {
98 self.returned = false;
99 self
100 }
101
102 #[must_use]
103 pub fn default_value(mut self, value: DbValue) -> Self {
104 self.default_value = Some(value);
105 self
106 }
107
108 #[must_use]
109 pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
110 self.db_name = Some(db_name.into());
111 self
112 }
113}