1const ALPHABET: &[char] = &[
2 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
3 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
4 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4',
5 '5', '6', '7', '8', '9',
6];
7
8pub fn generate_uid() -> String {
9 nanoid::nanoid!(10, ALPHABET)
10}
11
12#[cfg(test)]
13mod tests {
14 use super::*;
15
16 #[test]
17 fn uid_is_ten_chars() {
18 let uid = generate_uid();
19 assert_eq!(uid.len(), 10);
20 }
21
22 #[test]
23 fn uid_is_alphanumeric() {
24 let uid = generate_uid();
25 assert!(uid.chars().all(|c| c.is_alphanumeric()));
26 }
27
28 #[test]
29 fn two_uids_differ() {
30 let a = generate_uid();
31 let b = generate_uid();
32 assert_ne!(a, b);
33 }
34}