1pub mod cookie_utils;
4pub mod datetime;
5pub mod id;
6pub mod javascript;
7pub mod json;
8pub mod jwe;
9pub mod password;
10pub mod sessions;
11pub mod username;
12pub mod wildcard;
13
14use std::sync::{Mutex, MutexGuard};
15
16pub(crate) fn normalize_user_email(email: &str) -> String {
18 email.to_lowercase()
19}
20
21pub(crate) trait LockUnpoisoned<T> {
23 fn lock_unpoisoned(&self) -> MutexGuard<'_, T>;
24}
25
26impl<T> LockUnpoisoned<T> for Mutex<T> {
27 fn lock_unpoisoned(&self) -> MutexGuard<'_, T> {
28 self.lock()
29 .unwrap_or_else(std::sync::PoisonError::into_inner)
30 }
31}