pub mod extractors;
pub mod handlers;
pub mod password;
pub mod session;
pub mod user;
pub use extractors::{Authenticated, AuthenticationError, OptionalAuth};
pub use handlers::{
login_form, login_post, logout_post, register_form, register_post, AuthHandlerError,
LoginForm, RegisterForm,
};
pub use password::{
hash_password, verify_password, PasswordError, PasswordHashConfig, PasswordHasher,
};
pub use session::{FlashLevel, FlashMessage, SessionData, SessionError, SessionId};
pub use user::{CreateUser, EmailAddress, User, UserError};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct Session {
id: SessionId,
data: SessionData,
}
impl Session {
#[must_use]
pub const fn new(id: SessionId, data: SessionData) -> Self {
Self { id, data }
}
#[must_use]
pub const fn id(&self) -> &SessionId {
&self.id
}
#[must_use]
pub const fn data(&self) -> &SessionData {
&self.data
}
pub const fn data_mut(&mut self) -> &mut SessionData {
&mut self.data
}
#[must_use]
pub fn get<T: for<'de> Deserialize<'de>>(&self, key: &str) -> Option<T> {
self.data.get(key)
}
pub fn set<T: Serialize>(&mut self, key: String, value: T) -> Result<(), SessionError> {
self.data.set(key, value)
}
pub fn remove(&mut self, key: &str) -> Option<serde_json::Value> {
self.data.remove(key)
}
#[must_use]
pub const fn user_id(&self) -> Option<i64> {
self.data.user_id
}
pub const fn set_user_id(&mut self, user_id: Option<i64>) {
self.data.user_id = user_id;
}
pub fn add_flash(&mut self, message: FlashMessage) {
self.data.flash_messages.push(message);
}
pub fn take_flashes(&mut self) -> Vec<FlashMessage> {
std::mem::take(&mut self.data.flash_messages)
}
#[must_use]
pub fn has_flashes(&self) -> bool {
!self.data.flash_messages.is_empty()
}
}