Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ic1fda520473e53d1a584a3dda63ffda86a6a6964
35 lines
753 B
Rust
35 lines
753 B
Rust
use rand::RngExt;
|
|
|
|
const CHARSET: &[u8] =
|
|
b"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
const ID_LENGTH: usize = 16;
|
|
|
|
/// Generate a random 16-character alphanumeric pakku ID
|
|
pub fn generate_pakku_id() -> String {
|
|
let mut rng = rand::rng();
|
|
(0..ID_LENGTH)
|
|
.map(|_| {
|
|
let idx = rng.random_range(0..CHARSET.len());
|
|
CHARSET[idx] as char
|
|
})
|
|
.collect()
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_generate_pakku_id() {
|
|
let id = generate_pakku_id();
|
|
assert_eq!(id.len(), ID_LENGTH);
|
|
assert!(id.chars().all(|c| c.is_alphanumeric()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_unique_ids() {
|
|
let id1 = generate_pakku_id();
|
|
let id2 = generate_pakku_id();
|
|
assert_ne!(id1, id2);
|
|
}
|
|
}
|