1use rand::Rng;
2use rand::thread_rng;
3pub struct EasyRandom{
4 sma:Vec<char>, uca:Vec<char>, aca:Vec<char>, cc:Vec<char>, nms:Vec<char>, }
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