use std::sync::Arc; use lmdb::{DatabaseFlags, Environment}; use rkyv::{Archive, Serialize, Deserialize}; use crate::db::{AllocAdapter, DB, RawDB}; use crate::users::UserRef; #[derive(Clone, Debug, PartialEq, Eq)] #[derive(Archive, Serialize, Deserialize)] pub struct Session { userid: UserRef, } type Adapter = AllocAdapter; pub struct SessionCache { env: Arc, db: DB, } impl SessionCache { pub unsafe fn new(env: Arc, db: RawDB) -> Self { let db = DB::new_unchecked(db); Self { env, db } } pub unsafe fn open(env: Arc) -> lmdb::Result { let db = RawDB::open(&env, Some("sessions"))?; Ok(Self::new(env, db)) } pub unsafe fn create(env: Arc) -> lmdb::Result { let flags = DatabaseFlags::empty(); let db = RawDB::create(&env, Some("sessions"), flags)?; Ok(Self::new(env, db)) } }