Skip to main content

alibi_core/utils/
mod.rs

1//! Shared utility modules for `alibi-core`.
2
3pub 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
16/// Normalize a user identity email to the canonical persisted form.
17pub(crate) fn normalize_user_email(email: &str) -> String {
18    email.to_lowercase()
19}
20
21/// Lock a mutex whose critical sections cannot leave the guarded data inconsistent.
22pub(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}