Skip to main content

maxminddb/
geoip2.rs

1use serde::{Deserialize, Serialize};
2
3/// GeoIP2 Country record
4#[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/// GeoIP2 City record
20#[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/// GeoIP2 Enterprise record
44#[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/// GeoIP2 ISP record
68#[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/// GeoIP2 Connection-Type record
85#[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/// GeoIP2 Anonymous Ip record
92#[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/// GeoIP2 DensityIncome record
109#[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/// GeoIP2 Domain record
118#[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/// GeoIP2 Asn record
125#[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
133/// Country model structs
134pub 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
187/// City model structs
188pub 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
235/// Enterprise model structs
236pub 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}