passay_rs/rule/
sequence_data.rs1use crate::rule::character_sequence::CharacterSequence;
2
3pub trait SequenceData {
8 fn error_code(&self) -> &str;
13
14 fn get_sequences(&self) -> Vec<CharacterSequence>;
17}
18
19#[derive(Debug, PartialEq, Eq)]
24pub enum EnglishSequenceData {
25 Alphabetical,
26 Numerical,
27 USQwerty,
28}
29
30impl SequenceData for EnglishSequenceData {
31 fn error_code(&self) -> &str {
32 match self {
33 EnglishSequenceData::Alphabetical => "ILLEGAL_ALPHABETICAL_SEQUENCE",
34 EnglishSequenceData::Numerical => "ILLEGAL_NUMERICAL_SEQUENCE",
35 EnglishSequenceData::USQwerty => "ILLEGAL_QWERTY_SEQUENCE",
36 }
37 }
38
39 fn get_sequences(&self) -> Vec<CharacterSequence> {
40 match self {
41 EnglishSequenceData::Alphabetical =>
42 vec![CharacterSequence::new(vec![
43 "abcdefghijklmnopqrstuvwxyz".to_string(),
44 "ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string(),
45 ])
46 .unwrap()],
47 EnglishSequenceData::Numerical =>
48 vec![
49 CharacterSequence::new(vec!["0123456789".to_string()]).unwrap(),
50 ],
51 EnglishSequenceData::USQwerty =>
52 vec![
53 CharacterSequence::new(vec![
54 "`1234567890-=".to_string(),
55 "~!@#$%^&*()_+".to_string(),
56 "\u{0}\u{a1}\u{2122}\u{a3}\u{a2}\u{221e}\u{a7}\u{b6}\u{2022}\u{aa}\u{ba}\u{2013}\u{2260}".to_string(),
57 "\u{60}\u{2044}\u{20ac}\u{2039}\u{203a}\u{fb01}\u{fb02}\u{2021}\u{b0}\u{b7}\u{201a}\u{2014}\u{b1}".to_string()
58 ])
59 .unwrap(),
60 CharacterSequence::new(vec![
61 "qwertyuiop[]\\".to_string(),
62 "QWERTYUIOP{}|".to_string(),
63 "\u{153}\u{2211}\u{0}\u{ae}\u{2020}\u{a5}\u{0}\u{0}\u{f8}\u{3c0}\u{201c}\u{2018}\u{ab}".to_string(),
64 "\u{152}\u{201e}\u{b4}\u{2030}\u{2c7}\u{c1}\u{a8}\u{2c6}\u{d8}\u{220f}\u{201d}\u{2019}\u{bb}".to_string()
65 ])
66 .unwrap(),
67 CharacterSequence::new(vec![
68 "asdfghjkl;'".to_string(),
69 "ASDFGHJKL:\"".to_string(),
70 "\u{e5}\u{df}\u{2202}\u{192}\u{a9}\u{2d9}\u{2206}\u{2da}\u{ac}\u{2026}\u{e6}".to_string(),
71 "\u{c5}\u{cd}\u{ce}\u{cf}\u{2dd}\u{d3}\u{d4}\u{f8ff}\u{d2}\u{da}\u{c6}".to_string(),
72 ])
73 .unwrap(),
74 CharacterSequence::new(vec![
75 "zxcvbnm,./".to_string(),
76 "ZXCVBNM<>?".to_string(),
77 "\u{39}\u{2248}\u{e7}\u{221a}\u{222b}\u{0}\u{b5}\u{2264}\u{2265}\u{f7}".to_string(),
78 "\u{b8}\u{2db}\u{c7}\u{25ca}\u{131}\u{2dc}\u{c2}\u{af}\u{2d8}\u{bf}".to_string(),
79 ])
80 .unwrap(),
81 ],
82 }
83 }
84}
85
86pub enum PolishSequenceData {
88 Alphabetical,
89}
90
91impl SequenceData for PolishSequenceData {
92 fn error_code(&self) -> &str {
93 match self {
94 PolishSequenceData::Alphabetical => "ILLEGAL_ALPHABETICAL_SEQUENCE",
95 }
96 }
97
98 fn get_sequences(&self) -> Vec<CharacterSequence> {
99 match self {
100 PolishSequenceData::Alphabetical => vec![
101 CharacterSequence::new(vec![
102 "aąbcćdeęfghijklłmnńoópqrsśtuwxyzźż".to_string(),
103 "AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUWXYZŹŻ".to_string(),
104 ])
105 .unwrap(),
106 ],
107 }
108 }
109}
110
111pub enum GermanSequenceData {
112 Alphabetical,
113 DEQwertz,
114}
115
116impl SequenceData for GermanSequenceData {
117 fn error_code(&self) -> &str {
118 match self {
119 GermanSequenceData::Alphabetical => "ILLEGAL_ALPHABETICAL_SEQUENCE",
120 GermanSequenceData::DEQwertz => "ILLEGAL_QWERTY_SEQUENCE",
121 }
122 }
123
124 fn get_sequences(&self) -> Vec<CharacterSequence> {
125 match self {
126 GermanSequenceData::Alphabetical => vec![
127 CharacterSequence::new(vec![
128 "abcdefghijklmnopqrstuvwxyzäöüß".to_string(),
129 "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜẞ".to_string(),
130 ])
131 .unwrap(),
132 ],
133 GermanSequenceData::DEQwertz => vec![
134 CharacterSequence::new(vec![
135 "^1234567890ß´".to_string(),
136 "°!\"§$%&/()=?`".to_string(),
137 ])
139 .unwrap(),
140 CharacterSequence::new(vec![
141 "qwertzuiopü+".to_string(),
142 "QWERTZUIOPÜ*".to_string(),
143 ])
145 .unwrap(),
146 CharacterSequence::new(vec![
147 "asdfghjklöä#".to_string(),
148 "ASDFGHJKLÖÄ'".to_string(),
149 ])
151 .unwrap(),
152 CharacterSequence::new(vec![
153 "<yxcvbnm,.-".to_string(),
154 ">YXCVBNM;:_".to_string(),
155 ])
157 .unwrap(),
158 ],
159 }
160 }
161}
162
163pub enum CzechSequenceData {
164 Alphabetical,
165}
166
167impl SequenceData for CzechSequenceData {
168 fn error_code(&self) -> &str {
169 match self {
170 CzechSequenceData::Alphabetical => "ILLEGAL_ALPHABETICAL_SEQUENCE",
171 }
172 }
173
174 fn get_sequences(&self) -> Vec<CharacterSequence> {
175 match self {
176 CzechSequenceData::Alphabetical => vec![
177 CharacterSequence::new(vec![
178 "aábcčdďeěéfghiíjklmnňoópqrřsštťuúůvwxyýzž".to_string(),
179 "AÁBCČDĎEĚÉFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ".to_string(),
180 ])
181 .unwrap(),
182 ],
183 }
184 }
185}
186
187pub enum CyrillicSequenceData {
188 Alphabetical,
189}
190
191impl SequenceData for CyrillicSequenceData {
192 fn error_code(&self) -> &str {
193 match self {
194 CyrillicSequenceData::Alphabetical => "ILLEGAL_ALPHABETICAL_SEQUENCE",
195 }
196 }
197
198 fn get_sequences(&self) -> Vec<CharacterSequence> {
199 match self {
200 CyrillicSequenceData::Alphabetical => vec![
201 CharacterSequence::new(vec![
202 "абвгдеёжзийклмнопрстуфхцчшщъыьэюяіѣѳѵ".to_string(),
203 "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯІѢѲѴ".to_string(),
204 ])
205 .unwrap(),
206 ],
207 }
208 }
209}