1use serde::{Deserialize, Serialize};
2
3#[derive(Deserialize, Serialize, Clone, Debug)]
5pub struct Country<'a> {
6 #[serde(borrow)]
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub continent: Option<country::Continent<'a>>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub country: Option<country::Country<'a>>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub registered_country: Option<country::Country<'a>>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub represented_country: Option<country::RepresentedCountry<'a>>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub traits: Option<country::Traits>,
17}
18
19#[derive(Deserialize, Serialize, Clone, Debug)]
21pub struct City<'a> {
22 #[serde(borrow)]
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub city: Option<city::City<'a>>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub continent: Option<city::Continent<'a>>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub country: Option<city::Country<'a>>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub location: Option<city::Location<'a>>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub postal: Option<city::Postal<'a>>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub registered_country: Option<city::Country<'a>>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub represented_country: Option<city::RepresentedCountry<'a>>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub subdivisions: Option<Vec<city::Subdivision<'a>>>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub traits: Option<city::Traits>,
41}
42
43#[derive(Deserialize, Serialize, Clone, Debug)]
45pub struct Enterprise<'a> {
46 #[serde(borrow)]
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub city: Option<enterprise::City<'a>>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub continent: Option<enterprise::Continent<'a>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub country: Option<enterprise::Country<'a>>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub location: Option<enterprise::Location<'a>>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub postal: Option<enterprise::Postal<'a>>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub registered_country: Option<enterprise::Country<'a>>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub represented_country: Option<enterprise::RepresentedCountry<'a>>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub subdivisions: Option<Vec<enterprise::Subdivision<'a>>>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub traits: Option<enterprise::Traits<'a>>,
65}
66
67#[derive(Deserialize, Serialize, Clone, Debug)]
69pub struct Isp<'a> {
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub autonomous_system_number: Option<u32>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub autonomous_system_organization: Option<&'a str>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub isp: Option<&'a str>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub mobile_country_code: Option<&'a str>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub mobile_network_code: Option<&'a str>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub organization: Option<&'a str>,
82}
83
84#[derive(Deserialize, Serialize, Clone, Debug)]
86pub struct ConnectionType<'a> {
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub connection_type: Option<&'a str>,
89}
90
91#[derive(Deserialize, Serialize, Clone, Debug)]
93pub struct AnonymousIp {
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub is_anonymous: Option<bool>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub is_anonymous_vpn: Option<bool>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub is_hosting_provider: Option<bool>,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub is_public_proxy: Option<bool>,
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub is_residential_proxy: Option<bool>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub is_tor_exit_node: Option<bool>,
106}
107
108#[derive(Deserialize, Serialize, Clone, Debug)]
110pub struct DensityIncome {
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub average_income: Option<u32>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub population_density: Option<u32>,
115}
116
117#[derive(Deserialize, Serialize, Clone, Debug)]
119pub struct Domain<'a> {
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub domain: Option<&'a str>,
122}
123
124#[derive(Deserialize, Serialize, Clone, Debug)]
126pub struct Asn<'a> {
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub autonomous_system_number: Option<u32>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub autonomous_system_organization: Option<&'a str>,
131}
132
133pub mod country {
135 use std::collections::BTreeMap;
136
137 use serde::{Deserialize, Serialize};
138
139 #[derive(Deserialize, Serialize, Clone, Debug)]
140 pub struct Continent<'a> {
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub code: Option<&'a str>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub geoname_id: Option<u32>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub names: Option<BTreeMap<&'a str, &'a str>>,
147 }
148
149 #[derive(Deserialize, Serialize, Clone, Debug)]
150 pub struct Country<'a> {
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub geoname_id: Option<u32>,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub is_in_european_union: Option<bool>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub iso_code: Option<&'a str>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub names: Option<BTreeMap<&'a str, &'a str>>,
159 }
160
161 #[derive(Deserialize, Serialize, Clone, Debug)]
162 pub struct RepresentedCountry<'a> {
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub geoname_id: Option<u32>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub is_in_european_union: Option<bool>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub iso_code: Option<&'a str>,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub names: Option<BTreeMap<&'a str, &'a str>>,
171 #[serde(rename = "type")]
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub representation_type: Option<&'a str>,
174 }
175
176 #[derive(Deserialize, Serialize, Clone, Debug)]
177 pub struct Traits {
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub is_anonymous_proxy: Option<bool>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub is_anycast: Option<bool>,
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub is_satellite_provider: Option<bool>,
184 }
185}
186
187pub mod city {
189 use std::collections::BTreeMap;
190
191 use serde::{Deserialize, Serialize};
192
193 pub use super::country::{Continent, Country, RepresentedCountry, Traits};
194
195 #[derive(Deserialize, Serialize, Clone, Debug)]
196 pub struct City<'a> {
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub geoname_id: Option<u32>,
199 #[serde(borrow)]
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub names: Option<BTreeMap<&'a str, &'a str>>,
202 }
203
204 #[derive(Deserialize, Serialize, Clone, Debug)]
205 pub struct Location<'a> {
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub accuracy_radius: Option<u16>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub latitude: Option<f64>,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub longitude: Option<f64>,
212 #[serde(skip_serializing_if = "Option::is_none")]
213 pub metro_code: Option<u16>,
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub time_zone: Option<&'a str>,
216 }
217
218 #[derive(Deserialize, Serialize, Clone, Debug)]
219 pub struct Postal<'a> {
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub code: Option<&'a str>,
222 }
223
224 #[derive(Deserialize, Serialize, Clone, Debug)]
225 pub struct Subdivision<'a> {
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub geoname_id: Option<u32>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub iso_code: Option<&'a str>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub names: Option<BTreeMap<&'a str, &'a str>>,
232 }
233}
234
235pub mod enterprise {
237 use std::collections::BTreeMap;
238
239 use serde::{Deserialize, Serialize};
240
241 pub use super::country::{Continent, RepresentedCountry};
242
243 #[derive(Deserialize, Serialize, Clone, Debug)]
244 pub struct City<'a> {
245 #[serde(skip_serializing_if = "Option::is_none")]
246 pub confidence: Option<u8>,
247 #[serde(skip_serializing_if = "Option::is_none")]
248 pub geoname_id: Option<u32>,
249 #[serde(borrow)]
250 #[serde(skip_serializing_if = "Option::is_none")]
251 pub names: Option<BTreeMap<&'a str, &'a str>>,
252 }
253
254 #[derive(Deserialize, Serialize, Clone, Debug)]
255 pub struct Country<'a> {
256 #[serde(skip_serializing_if = "Option::is_none")]
257 pub confidence: Option<u8>,
258 #[serde(skip_serializing_if = "Option::is_none")]
259 pub geoname_id: Option<u32>,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 pub is_in_european_union: Option<bool>,
262 #[serde(skip_serializing_if = "Option::is_none")]
263 pub iso_code: Option<&'a str>,
264 #[serde(skip_serializing_if = "Option::is_none")]
265 pub names: Option<BTreeMap<&'a str, &'a str>>,
266 }
267
268 #[derive(Deserialize, Serialize, Clone, Debug)]
269 pub struct Location<'a> {
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub accuracy_radius: Option<u16>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 pub latitude: Option<f64>,
274 #[serde(skip_serializing_if = "Option::is_none")]
275 pub longitude: Option<f64>,
276 #[serde(skip_serializing_if = "Option::is_none")]
277 pub metro_code: Option<u16>,
278 #[serde(skip_serializing_if = "Option::is_none")]
279 pub time_zone: Option<&'a str>,
280 }
281
282 #[derive(Deserialize, Serialize, Clone, Debug)]
283 pub struct Postal<'a> {
284 #[serde(skip_serializing_if = "Option::is_none")]
285 pub code: Option<&'a str>,
286 #[serde(skip_serializing_if = "Option::is_none")]
287 pub confidence: Option<u8>,
288 }
289
290 #[derive(Deserialize, Serialize, Clone, Debug)]
291 pub struct Subdivision<'a> {
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub confidence: Option<u8>,
294 #[serde(skip_serializing_if = "Option::is_none")]
295 pub geoname_id: Option<u32>,
296 #[serde(skip_serializing_if = "Option::is_none")]
297 pub iso_code: Option<&'a str>,
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub names: Option<BTreeMap<&'a str, &'a str>>,
300 }
301
302 #[derive(Deserialize, Serialize, Clone, Debug)]
303 pub struct Traits<'a> {
304 #[serde(skip_serializing_if = "Option::is_none")]
305 pub autonomous_system_number: Option<u32>,
306 #[serde(skip_serializing_if = "Option::is_none")]
307 pub autonomous_system_organization: Option<&'a str>,
308 #[serde(skip_serializing_if = "Option::is_none")]
309 pub connection_type: Option<&'a str>,
310 #[serde(skip_serializing_if = "Option::is_none")]
311 pub domain: Option<&'a str>,
312 #[serde(skip_serializing_if = "Option::is_none")]
313 pub is_anonymous: Option<bool>,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 pub is_anonymous_proxy: Option<bool>,
316 #[serde(skip_serializing_if = "Option::is_none")]
317 pub is_anonymous_vpn: Option<bool>,
318 #[serde(skip_serializing_if = "Option::is_none")]
319 pub is_anycast: Option<bool>,
320 #[serde(skip_serializing_if = "Option::is_none")]
321 pub is_hosting_provider: Option<bool>,
322 #[serde(skip_serializing_if = "Option::is_none")]
323 pub isp: Option<&'a str>,
324 #[serde(skip_serializing_if = "Option::is_none")]
325 pub is_public_proxy: Option<bool>,
326 #[serde(skip_serializing_if = "Option::is_none")]
327 pub is_residential_proxy: Option<bool>,
328 #[serde(skip_serializing_if = "Option::is_none")]
329 pub is_satellite_provider: Option<bool>,
330 #[serde(skip_serializing_if = "Option::is_none")]
331 pub is_tor_exit_node: Option<bool>,
332 #[serde(skip_serializing_if = "Option::is_none")]
333 pub mobile_country_code: Option<&'a str>,
334 #[serde(skip_serializing_if = "Option::is_none")]
335 pub mobile_network_code: Option<&'a str>,
336 #[serde(skip_serializing_if = "Option::is_none")]
337 pub organization: Option<&'a str>,
338 #[serde(skip_serializing_if = "Option::is_none")]
339 pub user_type: Option<&'a str>,
340 }
341}