use crate::session::data::SessionData;
use crate::session::id::SessionId;
use axess_rng::SystemRng;
use std::sync::Arc;
use tokio::sync::RwLock;
#[derive(Clone)]
pub(crate) struct SessionHandle(pub(crate) Arc<RwLock<SessionInner>>);
pub(crate) struct SessionInner {
pub id: SessionId,
pub data: SessionData,
pub(crate) modified: bool,
pub(crate) regenerate: bool,
pub(crate) pre_cycle_id: Option<SessionId>,
pub(crate) pending_fingerprint: Option<String>,
pub(crate) max_custom_bytes: usize,
}
impl SessionInner {
pub(crate) fn rotate_id(&mut self) {
let rng = SystemRng;
let new_id = SessionId::new(&rng);
if self.pre_cycle_id.is_none() {
self.pre_cycle_id = Some(self.id);
}
self.id = new_id;
self.regenerate = true;
}
}