dtz_identifier/
lib.rs

1mod apikey_id;
2mod chat_id;
3mod context_id;
4mod execution_id;
5mod feed_id;
6mod identity_id;
7mod job_id;
8mod node_id;
9mod object_id;
10mod role_id;
11mod service_id;
12mod task_id;
13mod volume_id;
14
15pub use apikey_id::*;
16pub use chat_id::*;
17pub use context_id::*;
18pub use execution_id::*;
19pub use feed_id::*;
20pub use identity_id::*;
21pub use job_id::*;
22pub use node_id::*;
23pub use object_id::*;
24pub use role_id::*;
25pub use service_id::*;
26pub use task_id::*;
27pub use volume_id::*;
28
29fn generate_internal_id(length: usize) -> String {
30    use rand::prelude::*;
31    let mut rng = rand::rng();
32    // generate the first non-numeric character
33    let first_char: char = loop {
34        let c: char = rng.sample(rand::distr::Alphanumeric) as char;
35        if c.is_alphabetic() {
36            break c;
37        }
38    };
39    // generate DEFAULT_LENGTH-1 random alphanumeric characters
40    let mut id: Vec<char> = (0..length - 1)
41        .map(|_| rng.sample(rand::distr::Alphanumeric) as char)
42        .collect();
43    id.insert(0, first_char);
44    id.into_iter().collect::<String>().to_lowercase()
45}
46
47#[test]
48fn test_generate_id_string() {
49    let id = generate_internal_id(8);
50    println!("id: {}", id);
51    assert_eq!(id.len(), 8);
52    let c = id.chars().next().unwrap();
53    assert!(c.is_alphabetic());
54}