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
use crate::{Distribution, Random, Rng};
const ALPHANUMERIC: &[u8; 62] = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
#[derive(Copy, Clone, Debug)]
pub struct Alphanumeric;
impl Distribution<char> for Alphanumeric {
#[inline]
fn sample<R: Rng + ?Sized>(&self, rng: &mut Random<R>) -> char {
loop {
let val = rng.next_u32() >> (32 - 6);
if (val as usize) < ALPHANUMERIC.len() {
break ALPHANUMERIC[val as usize] as char;
}
}
}
}