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}