use rand::{Rng, RngCore};
pub struct Random {}
const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
abcdefghijklmnopqrstuvwxyz\
0123456789";
const CHARSET_WITH_PUNCTUATION: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
abcdefghijklmnopqrstuvwxyz\
0123456789\
~!@#$%^&*()-_=+[]{};':,./<>?";
impl Random {
pub fn get_rand_bytes() -> Vec<u8> {
let mut b: [u8; 32] = [0u8; 32];
let mut rng = rand::thread_rng();
rng.fill(&mut b);
b.to_vec()
}
pub fn get_rand_chars(len: usize, punctuation: bool) -> String {
let mut rng = rand::thread_rng();
let mut charset = CHARSET;
if punctuation {
charset = CHARSET_WITH_PUNCTUATION;
}
let password: String = (0..len)
.map(|_| {
let idx = rng.gen_range(0..charset.len());
charset[idx] as char
})
.collect();
password
}
}