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 37 38 39 40 41 42 43 44 45 46 47 48 49 50
use rand::distributions::range::SampleRange; use rand::{thread_rng, Rand, Rng}; use std::char; #[inline] pub fn gen_range<T: PartialOrd + SampleRange>(start: T, end: T) -> T { thread_rng().gen_range(start, end) } #[inline] pub fn random<T: Rand>() -> T { thread_rng().gen() } #[inline] pub fn shuffle<T: Clone>(arr: &[T]) -> Vec<T> { let mut v = arr.to_vec(); thread_rng().shuffle(&mut v); v } #[inline] pub fn ascii_string(length: usize) -> String { thread_rng().gen_ascii_chars().take(length).collect() } #[inline] pub fn gen_vec<T: Rand>(length: usize) -> Vec<T> { thread_rng() .gen_iter::<T>() .take(length) .collect::<Vec<T>>() } #[inline] pub fn numerify_sym(string: &str) -> String { string .chars() .map(|x| match x { 'N' => char::from_digit(gen_range(1, 10), 10).unwrap(), '#' => char::from_digit(gen_range(0, 10), 10).unwrap(), other => other, }) .collect() } #[inline] pub fn take_one<'a>(list: &[&'a str]) -> &'a str { thread_rng().choose(list).expect("take_one got empty list") }