cs_utils/utils/random_str.rs
1use rand::{Rng, distributions::{Alphanumeric, uniform::SampleRange}};
2
3use crate::random_number;
4
5/// Generate a random string, `length` characters long.
6///
7/// ## Panics
8///
9/// Panics if length of `0` passed, as its impossible to have a zero-length `random` string.
10///
11/// ## Arguments
12///
13/// * `length` - resulting random string length, must be greater than 0.
14///
15/// ## Examples
16///
17/// ```
18/// use cs_utils::random_str;
19///
20/// let result = random_str(8);
21///
22/// println!("random string \"{}\" generated", &result);
23///
24/// assert_eq!(
25/// result.len(),
26/// 8,
27/// );
28/// ```
29pub fn random_str(length: usize) -> String {
30 assert!(
31 length > 0,
32 "Length parameter should be greater than 0.",
33 );
34
35 return rand::thread_rng()
36 .sample_iter(&Alphanumeric)
37 .take(length)
38 .map(char::from)
39 .collect();
40}
41
42
43/// Generate a random string of `random` length.
44///
45/// ## Panics
46///
47/// Panics if length of `0` generated by the range, as its impossible to have a zero-length `random` string.
48///
49/// ## Arguments
50///
51/// * `range` - range(min, max]) of the string length.
52///
53/// ## Examples
54///
55/// ```
56/// use cs_utils::random_str_rg;
57///
58/// let result = random_str_rg(2..8);
59///
60/// println!("random string \"{}\" generated", &result);
61///
62/// assert!(
63/// result.len() >= 2,
64/// "Generated string must be at least 2 characters long."
65/// );
66///
67/// assert!(
68/// result.len() < 8,
69/// "Generated string length must be < 7.",
70/// );
71/// ```
72pub fn random_str_rg<R: SampleRange<usize>>(range: R) -> String {
73 let string_length = random_number(range);
74
75 return random_str(string_length);
76}