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 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
186/// City model structs
187pub 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
233/// Enterprise model structs
234pub 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}