1pub mod config;
8mod id;
9mod incoming;
10mod middleware;
11mod session_;
12mod store_;
13pub(crate) mod wire;
14
15use std::collections::HashMap;
16
17pub use id::SessionId;
18pub use incoming::IncomingSession;
19pub use middleware::{FINALIZE_SESSION, finalize_session};
20use pavex::methods;
21pub use session_::Session;
22pub use store_::SessionStore;
23
24pub mod store {
25 pub use crate::store_::errors;
27 pub use crate::store_::{SessionRecord, SessionRecordRef, SessionStorageBackend};
28}
29
30pub use crate::session_::errors;
31
32pub mod client {
33 pub use crate::session_::{ClientSessionState, ClientSessionStateMut};
35}
36
37pub(crate) type State = HashMap<std::borrow::Cow<'static, str>, serde_json::Value>;
39
40#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
41#[serde(rename_all = "snake_case")]
42#[non_exhaustive]
43#[pavex::config(key = "session", default_if_missing)]
48pub struct SessionConfig {
49 #[serde(default)]
50 pub cookie: crate::config::SessionCookieConfig,
52 #[serde(default)]
53 pub state: crate::config::SessionStateConfig,
55}
56
57#[methods]
58impl SessionConfig {
59 pub fn new() -> Self {
61 Self::default()
62 }
63
64 #[doc(hidden)]
65 #[transient]
66 pub fn cookie_config(&self) -> &crate::config::SessionCookieConfig {
67 &self.cookie
68 }
69
70 #[doc(hidden)]
71 #[transient]
72 pub fn state_config(&self) -> &crate::config::SessionStateConfig {
73 &self.state
74 }
75}