use cfg_if::cfg_if;
use rand::distr::{Alphanumeric, SampleString};
use rand::rngs::SmallRng;
#[derive(Debug)]
pub struct Random {
rng: SmallRng,
}
impl Default for Random {
#[inline]
fn default() -> Self {
cfg_if! {
if #[cfg(test)] {
use rand::SeedableRng;
let rng = SmallRng::seed_from_u64(1);
} else {
let rng = rand::make_rng();
}
}
Random { rng }
}
}
impl Random {
pub fn generate_html_id_into(&mut self, buffer: &mut String) {
buffer.push_str("wj-id-");
Alphanumeric.append_string(&mut self.rng, buffer, 16);
}
pub fn generate_html_id(&mut self) -> String {
let mut buffer = String::new();
self.generate_html_id_into(&mut buffer);
buffer
}
}
#[test]
fn html_id() {
let mut rand = Random::default();
let mut buffer = String::new();
rand.generate_html_id_into(&mut buffer);
assert_eq!(
buffer, "wj-id-zvGvLlhGI6VEZFKj",
"Generated HTML ID doesn't match expected",
);
let html_id = rand.generate_html_id();
assert_eq!(
html_id, "wj-id-e9pQyKaPmLnulpgn",
"Generated HTML ID doesn't match expected",
);
}