rustauth_core/options/
session.rs1use std::collections::BTreeMap;
2
3use time::Duration;
4
5use crate::db::{DbFieldType, DbValue};
6
7use super::cookies::CookieCacheOptions;
8use super::model_schema::ModelSchemaOptions;
9
10#[derive(Debug, Clone, PartialEq, Default)]
12pub struct SessionOptions {
13 pub schema: ModelSchemaOptions,
14 pub expires_in: Option<Duration>,
15 pub update_age: Option<Duration>,
16 pub fresh_age: Option<Duration>,
17 pub disable_session_refresh: bool,
18 pub defer_session_refresh: bool,
19 pub store_session_in_database: bool,
20 pub preserve_session_in_database: bool,
21 pub cookie_cache: CookieCacheOptions,
22 pub additional_fields: BTreeMap<String, SessionAdditionalField>,
23}
24
25impl SessionOptions {
26 pub fn new() -> Self {
27 Self::default()
28 }
29
30 pub fn builder() -> Self {
31 Self::new()
32 }
33
34 #[must_use]
35 pub fn schema(mut self, schema: ModelSchemaOptions) -> Self {
36 self.schema = schema;
37 self
38 }
39
40 #[must_use]
41 pub fn expires_in(mut self, expires_in: Duration) -> Self {
42 self.expires_in = Some(expires_in);
43 self
44 }
45
46 #[must_use]
47 pub fn update_age(mut self, update_age: Duration) -> Self {
48 self.update_age = Some(update_age);
49 self
50 }
51
52 #[must_use]
53 pub fn fresh_age(mut self, fresh_age: Duration) -> Self {
54 self.fresh_age = Some(fresh_age);
55 self
56 }
57
58 #[must_use]
59 pub fn disable_session_refresh(mut self, disabled: bool) -> Self {
60 self.disable_session_refresh = disabled;
61 self
62 }
63
64 #[must_use]
65 pub fn defer_session_refresh(mut self, deferred: bool) -> Self {
66 self.defer_session_refresh = deferred;
67 self
68 }
69
70 #[must_use]
71 pub fn store_session_in_database(mut self, enabled: bool) -> Self {
72 self.store_session_in_database = enabled;
73 self
74 }
75
76 #[must_use]
77 pub fn preserve_session_in_database(mut self, enabled: bool) -> Self {
78 self.preserve_session_in_database = enabled;
79 self
80 }
81
82 #[must_use]
83 pub fn cookie_cache(mut self, cookie_cache: CookieCacheOptions) -> Self {
84 self.cookie_cache = cookie_cache;
85 self
86 }
87
88 #[must_use]
89 pub fn additional_field(
90 mut self,
91 name: impl Into<String>,
92 field: SessionAdditionalField,
93 ) -> Self {
94 self.additional_fields.insert(name.into(), field);
95 self
96 }
97}
98
99#[derive(Debug, Clone, PartialEq)]
101pub struct SessionAdditionalField {
102 pub field_type: DbFieldType,
103 pub required: bool,
104 pub input: bool,
105 pub returned: bool,
106 pub default_value: Option<DbValue>,
107 pub db_name: Option<String>,
108}
109
110impl SessionAdditionalField {
111 pub fn new(field_type: DbFieldType) -> Self {
112 Self {
113 field_type,
114 required: true,
115 input: true,
116 returned: true,
117 default_value: None,
118 db_name: None,
119 }
120 }
121
122 #[must_use]
123 pub fn optional(mut self) -> Self {
124 self.required = false;
125 self
126 }
127
128 #[must_use]
129 pub fn generated(mut self) -> Self {
130 self.input = false;
131 self
132 }
133
134 #[must_use]
135 pub fn hidden(mut self) -> Self {
136 self.returned = false;
137 self
138 }
139
140 #[must_use]
141 pub fn default_value(mut self, value: DbValue) -> Self {
142 self.default_value = Some(value);
143 self
144 }
145
146 #[must_use]
147 pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
148 self.db_name = Some(db_name.into());
149 self
150 }
151}