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 serde::{Deserialize, Serialize};
136 use std::collections::BTreeMap;
137
138 #[derive(Deserialize, Serialize, Clone, Debug)]
139 pub struct Continent<'a> {
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub code: Option<&'a str>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub geoname_id: Option<u32>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub names: Option<BTreeMap<&'a str, &'a str>>,
146 }
147
148 #[derive(Deserialize, Serialize, Clone, Debug)]
149 pub struct Country<'a> {
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub geoname_id: Option<u32>,
152 #[serde(skip_serializing_if = "Option::is_none")]
153 pub is_in_european_union: Option<bool>,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub iso_code: Option<&'a str>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub names: Option<BTreeMap<&'a str, &'a str>>,
158 }
159
160 #[derive(Deserialize, Serialize, Clone, Debug)]
161 pub struct RepresentedCountry<'a> {
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub geoname_id: Option<u32>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub is_in_european_union: Option<bool>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub iso_code: Option<&'a str>,
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub names: Option<BTreeMap<&'a str, &'a str>>,
170 #[serde(rename = "type")]
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub representation_type: Option<&'a str>,
173 }
174
175 #[derive(Deserialize, Serialize, Clone, Debug)]
176 pub struct Traits {
177 #[serde(skip_serializing_if = "Option::is_none")]
178 pub is_anonymous_proxy: Option<bool>,
179 #[serde(skip_serializing_if = "Option::is_none")]
180 pub is_anycast: Option<bool>,
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub is_satellite_provider: Option<bool>,
183 }
184}
185
186pub mod city {
188 use serde::{Deserialize, Serialize};
189 use std::collections::BTreeMap;
190
191 pub use super::country::{Continent, Country, RepresentedCountry, Traits};
192
193 #[derive(Deserialize, Serialize, Clone, Debug)]
194 pub struct City<'a> {
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub geoname_id: Option<u32>,
197 #[serde(borrow)]
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub names: Option<BTreeMap<&'a str, &'a str>>,
200 }
201
202 #[derive(Deserialize, Serialize, Clone, Debug)]
203 pub struct Location<'a> {
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub accuracy_radius: Option<u16>,
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub latitude: Option<f64>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub longitude: Option<f64>,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub metro_code: Option<u16>,
212 #[serde(skip_serializing_if = "Option::is_none")]
213 pub time_zone: Option<&'a str>,
214 }
215
216 #[derive(Deserialize, Serialize, Clone, Debug)]
217 pub struct Postal<'a> {
218 #[serde(skip_serializing_if = "Option::is_none")]
219 pub code: Option<&'a str>,
220 }
221
222 #[derive(Deserialize, Serialize, Clone, Debug)]
223 pub struct Subdivision<'a> {
224 #[serde(skip_serializing_if = "Option::is_none")]
225 pub geoname_id: Option<u32>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub iso_code: Option<&'a str>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub names: Option<BTreeMap<&'a str, &'a str>>,
230 }
231}
232
233pub mod enterprise {
235 use serde::{Deserialize, Serialize};
236 use std::collections::BTreeMap;
237
238 pub use super::country::{Continent, RepresentedCountry};
239
240 #[derive(Deserialize, Serialize, Clone, Debug)]
241 pub struct City<'a> {
242 #[serde(skip_serializing_if = "Option::is_none")]
243 pub confidence: Option<u8>,
244 #[serde(skip_serializing_if = "Option::is_none")]
245 pub geoname_id: Option<u32>,
246 #[serde(borrow)]
247 #[serde(skip_serializing_if = "Option::is_none")]
248 pub names: Option<BTreeMap<&'a str, &'a str>>,
249 }
250
251 #[derive(Deserialize, Serialize, Clone, Debug)]
252 pub struct Country<'a> {
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub confidence: Option<u8>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub geoname_id: Option<u32>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub is_in_european_union: Option<bool>,
259 #[serde(skip_serializing_if = "Option::is_none")]
260 pub iso_code: Option<&'a str>,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub names: Option<BTreeMap<&'a str, &'a str>>,
263 }
264
265 #[derive(Deserialize, Serialize, Clone, Debug)]
266 pub struct Location<'a> {
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub accuracy_radius: Option<u16>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub latitude: Option<f64>,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 pub longitude: Option<f64>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub metro_code: Option<u16>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub time_zone: Option<&'a str>,
277 }
278
279 #[derive(Deserialize, Serialize, Clone, Debug)]
280 pub struct Postal<'a> {
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub code: Option<&'a str>,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub confidence: Option<u8>,
285 }
286
287 #[derive(Deserialize, Serialize, Clone, Debug)]
288 pub struct Subdivision<'a> {
289 #[serde(skip_serializing_if = "Option::is_none")]
290 pub confidence: Option<u8>,
291 #[serde(skip_serializing_if = "Option::is_none")]
292 pub geoname_id: Option<u32>,
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub iso_code: Option<&'a str>,
295 #[serde(skip_serializing_if = "Option::is_none")]
296 pub names: Option<BTreeMap<&'a str, &'a str>>,
297 }
298
299 #[derive(Deserialize, Serialize, Clone, Debug)]
300 pub struct Traits<'a> {
301 #[serde(skip_serializing_if = "Option::is_none")]
302 pub autonomous_system_number: Option<u32>,
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub autonomous_system_organization: Option<&'a str>,
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub connection_type: Option<&'a str>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub domain: Option<&'a str>,
309 #[serde(skip_serializing_if = "Option::is_none")]
310 pub is_anonymous: Option<bool>,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub is_anonymous_proxy: Option<bool>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub is_anonymous_vpn: Option<bool>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub is_anycast: Option<bool>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub is_hosting_provider: Option<bool>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub isp: Option<&'a str>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub is_public_proxy: Option<bool>,
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub is_residential_proxy: Option<bool>,
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub is_satellite_provider: Option<bool>,
327 #[serde(skip_serializing_if = "Option::is_none")]
328 pub is_tor_exit_node: Option<bool>,
329 #[serde(skip_serializing_if = "Option::is_none")]
330 pub mobile_country_code: Option<&'a str>,
331 #[serde(skip_serializing_if = "Option::is_none")]
332 pub mobile_network_code: Option<&'a str>,
333 #[serde(skip_serializing_if = "Option::is_none")]
334 pub organization: Option<&'a str>,
335 #[serde(skip_serializing_if = "Option::is_none")]
336 pub user_type: Option<&'a str>,
337 }
338}