tokengen_core/
lib.rs

1use base64::{Engine as _, engine::general_purpose};
2use rand::Rng;
3
4/**
5 * If `length` is `None`, 32 will be used
6  ```rs
7  use tokengen_core::generate;
8
9  fn main() {
10    println!(generate(32)) // or use generate(None)
11  }
12 */
13pub 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}