1use base64::{Engine as _, engine::general_purpose};
2use rand::Rng;
3
4pub fn generate(length: Option<i32>) -> String {
14 let mut clength = 0;
15 let mut a = 32;
16 if let Some(x) = length {
17 a = x
18 }
19 let mut encoded = String::from("");
20 while clength < a {
21 let mut rng = rand::thread_rng();
22 let out: i32 = rng.gen();
23 let nencoded= general_purpose::STANDARD_NO_PAD.encode(out.to_be_bytes());
24 encoded += &nencoded;
25 clength += nencoded.len() as i32;
26 encoded.shrink_to(a as usize);
27 }
28 encoded.chars().take(a as usize).collect::<String>()
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn it_works() {
37 let result_32 = generate(None).len();
38 let result_48 = generate(Some(48)).len();
39 let result_64 = generate(Some(64)).len();
40 let result_80 = generate(Some(80)).len();
41 let result_96 = generate(Some(96)).len();
42 assert_eq!(result_32, 32);
43 assert_eq!(result_48, 48);
44 assert_eq!(result_64, 64);
45 assert_eq!(result_80, 80);
46 assert_eq!(result_96, 96)
47 }
48}