web_parser/parser/
user.rs1use rand::Rng;
2
3use crate::prelude::*;
4
5const RAND_USERS_COUNT: usize = 14;
6const RAND_USERS: [User; RAND_USERS_COUNT] = [
7 User::ChromeWindows,
8 User::ChromeMac,
9 User::ChromeLinux,
10
11 User::FirefoxWindows,
12 User::FirefoxMac,
13 User::FirefoxLinux,
14
15 User::EdgeWindows,
16 User::EdgeMac,
17
18 User::SafariMac,
19
20 User::OperaWindows,
21 User::OperaMac,
22 User::OperaLinux,
23
24 User::YandexWindows,
25 User::YandexLinux,
26];
27
28#[derive(Debug, Display, Clone, Eq, PartialEq)]
30pub enum User {
31 #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
32AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
33 ChromeWindows,
34
35 #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \
36AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
37 ChromeMac,
38
39 #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
40(KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
41 ChromeLinux,
42
43 #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
44(KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36"]
45 ChromeAndroid,
46
47 #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:114.0) Gecko/20100101 Firefox/114.0"]
48 FirefoxWindows,
49
50 #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:114.0) Gecko/20100101 Firefox/114.0"]
51 FirefoxMac,
52
53 #[display = "Mozilla/5.0 (X11; Linux x86_64; rv:114.0) Gecko/20100101 Firefox/114.0"]
54 FirefoxLinux,
55
56 #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
57AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.0.0"]
58 EdgeWindows,
59
60 #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \
61AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.0.0"]
62 EdgeMac,
63
64 #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 \
65(KHTML, like Gecko) Version/16.0 Safari/605.1.15"]
66 SafariMac,
67
68 #[display = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 \
69(KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"]
70 SafariIOS,
71
72 #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
73(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
74 OperaWindows,
75
76 #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 \
77(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
78 OperaMac,
79
80 #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
81(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
82 OperaLinux,
83
84 #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
85(KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 OPR/120.0.0.0"]
86 OperaAndroid,
87
88 #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
89(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Safari/537.36"]
90 YandexWindows,
91
92 #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
93(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Safari/537.36"]
94 YandexLinux,
95
96 #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
97(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Mobile Safari/537.36"]
98 YandexAndroid,
99
100 #[display = "{0}"]
101 Custom(String)
102}
103
104impl User {
105 pub fn random() -> Self {
107 let index = rand::rng().random_range(0..RAND_USERS_COUNT);
108
109 RAND_USERS[index].clone()
110 }
111}