use actix_session::SessionExt; use actix_session::{Session, SessionGetError, SessionInsertError}; use actix_web::dev::Payload; use actix_web::{FromRequest, HttpRequest}; use std::future::{ready, Ready}; use uuid::Uuid; pub struct TypedSession(Session); impl TypedSession { const USER_ID_KEY: &'static str = "user_id"; pub fn renew(&self) { self.0.renew(); } pub fn insert_user_id(&self, user_id: Uuid) -> Result<(), SessionInsertError> { self.0.insert(Self::USER_ID_KEY, user_id) } pub fn get_user_id(&self) -> Result, SessionGetError> { self.0.get(Self::USER_ID_KEY) } pub fn log_out(self) { self.0.purge() } } impl FromRequest for TypedSession { type Error = ::Error; type Future = Ready>; fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future { ready(Ok(TypedSession(req.get_session()))) } }