use uuid::Uuid;
use std::time::{SystemTime, UNIX_EPOCH};
pub struct Sid;
impl Sid {
pub fn uuid() -> String { Uuid::new_v4().simple().to_string() }
pub fn short() -> String {
let u = Uuid::new_v4();
u.simple().to_string()[..16].to_string()
}
pub fn tiny() -> String {
let u = Uuid::new_v4();
u.simple().to_string()[..8].to_string()
}
pub fn tsid() -> String {
let ts = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis();
let rand: u32 = rand::random();
format!("{:013x}{:07x}", ts, rand & 0x0FFFFFFF)
}
pub fn uuid7() -> String {
Uuid::now_v7().simple().to_string()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_short() { assert_eq!(Sid::short().len(), 16); }
#[test]
fn test_tiny() { assert_eq!(Sid::tiny().len(), 8); }
#[test]
fn test_uuid() { assert_eq!(Sid::uuid().len(), 32); }
}