1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
extern crate rand; use rand::Rng; const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\ abcdefghijklmnopqrstuvwxyz\ 0123456789"; pub fn create_random_secret(secret_len: usize) -> String { let mut rng = rand::thread_rng(); (0..secret_len) .map(|_| { let idx = rng.gen_range(0..CHARSET.len()); CHARSET[idx] as char }) .collect() } #[cfg(test)] mod tests { use super::*; #[test] fn it_creates_random_secret() { let len = 30; let sec1 = create_random_secret(len); let sec2 = create_random_secret(len); assert_eq!(sec1.len(), 30); assert_eq!(sec2.len(), 30); assert_ne!(sec2, sec1); let len = 47; assert_eq!(len, create_random_secret(len).len()) } }