Line data Source code
1 : use std::collections::BTreeMap;
2 :
3 : use rand::Rng;
4 : use utils::shard::TenantShardId;
5 :
6 : static CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
7 :
8 : /// Generate a random string of `length` that can be used as a password. The generated string
9 : /// contains alphanumeric characters and special characters (!@#$%^&*())
10 2 : pub fn generate_random_password(length: usize) -> String {
11 2 : let mut rng = rand::rng();
12 2 : (0..length)
13 20 : .map(|_| {
14 20 : let idx = rng.random_range(0..CHARSET.len());
15 20 : CHARSET[idx] as char
16 20 : })
17 2 : .collect()
18 2 : }
19 :
20 : pub(crate) struct TenantShardSizeMap {
21 : #[expect(dead_code)]
22 : pub map: BTreeMap<TenantShardId, u64>,
23 : }
24 :
25 : impl TenantShardSizeMap {
26 0 : pub fn new(map: BTreeMap<TenantShardId, u64>) -> Self {
27 0 : Self { map }
28 0 : }
29 : }
30 :
31 : #[cfg(test)]
32 : mod test {
33 : use super::*;
34 :
35 : #[test]
36 1 : fn test_generate_random_password() {
37 1 : let pwd1 = generate_random_password(10);
38 1 : assert_eq!(pwd1.len(), 10);
39 1 : let pwd2 = generate_random_password(10);
40 1 : assert_ne!(pwd1, pwd2);
41 10 : assert!(pwd1.chars().all(|c| CHARSET.contains(&(c as u8))));
42 10 : assert!(pwd2.chars().all(|c| CHARSET.contains(&(c as u8))));
43 1 : }
44 : }
|