Skip to main content

agentbin_core/
uid.rs

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}