easy_random/
lib.rs

1use rand::Rng;
2use rand::thread_rng;
3pub struct  EasyRandom{
4    sma:Vec<char>, //smallcase
5    uca:Vec<char>, //uppercase
6    aca:Vec<char>, //mixedcase
7    cc:Vec<char>,  //specialchars
8    nms:Vec<char>, //numbers
9}
10
11impl EasyRandom{
12    pub fn new()-> Self{
13        EasyRandom{
14            sma:('a'..='z').collect(),
15            uca:('A'..'Z').collect(),
16            aca:  (b'a'..=b'z').chain(b'A'..=b'Z').map(|c| c as char).collect(),
17            nms:('0'..'9').collect(),
18            cc:Vec::new(),
19        }
20    }
21    fn generate_random_index(&mut self, i:usize) -> usize {
22        let mut rng = thread_rng();
23        rng.gen_range(0..i)
24    }
25    pub fn add_custom_chars(&mut self,chars:&[char]){
26        self.cc.extend(chars);
27    }
28    pub fn add_custom_chars_from_vec(&mut self,chars:Vec<char>){
29        self.cc.extend(chars);
30    }
31    pub fn exclude_chars(&mut self, chars: &[char]) {
32        for &c in chars {
33            let exclude_c = c; 
34            self.sma.retain(|&x| x != exclude_c);
35            self.uca.retain(|&x| x != exclude_c);
36            self.aca.retain(|&x| x != exclude_c);
37            self.nms.retain(|&x| x != exclude_c);
38        }
39    }
40    pub fn exclude_chars_from_vec(&mut self, chars: Vec<char>) {
41        for c in chars {
42            let exclude_c = c; 
43            self.sma.retain(|&x| x != exclude_c);
44            self.uca.retain(|&x| x != exclude_c);
45            self.aca.retain(|&x| x != exclude_c);
46            self.nms.retain(|&x| x != exclude_c);
47        }
48    }
49    pub fn generate(&mut self, given: String)->String{
50
51        let mut pattern : String=String::new();
52        for c in given.chars(){
53            if c.eq(&'a'){
54                let n=self.sma.len();
55                let i =self.generate_random_index(n);
56                let x=self.sma[i];
57                pattern.push(x);
58            }
59            else if c.eq(&'b'){
60                let n=self.uca.len();
61                let i =self.generate_random_index(n);
62                let x=self.uca[i];
63                pattern.push(x);
64
65            }
66            else if c.eq(&'c'){
67                let n=self.aca.len();
68                let i =self.generate_random_index(n);
69                let x=self.aca[i];
70                pattern.push(x);
71
72            }
73            else if c.eq(&'n'){
74                let n=self.nms.len();
75                let i =self.generate_random_index(n);
76                let x=self.nms[i];
77                pattern.push(x);
78            }
79            else if c.eq(&'s'){
80                let n=self.cc.len();
81                if n.eq(&0){
82                    pattern=String::from("Please add custom chars before using 's' ");
83                    break;
84                }
85                let i =self.generate_random_index(n);
86                let x=self.cc[i];
87                pattern.push(x);
88            }
89            else if c.eq(&' '){
90                pattern.push(' ');
91            }
92            else if c.eq(&'_'){
93                pattern.push('_');
94            }            
95            else{
96                pattern= String::from("Please use these characters only:
97                                         a(lowercase),
98                                         b(uppercase),
99                                         c(upper+lower cases),
100                                         s(custom chars)
101                                         n(nms) only to generate");
102                break;
103            }
104        }
105        return pattern;
106    }
107}
108