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