1use serde::{Deserialize, Serialize};
10use std::collections::HashMap;
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize)]
18#[non_exhaustive]
19pub struct LookupResponse {
20 #[serde(default)]
23 pub success: bool,
24
25 pub ip: Option<String>,
27
28 #[serde(rename = "type")]
30 pub ip_type: Option<String>,
31
32 pub continent: Option<String>,
33 pub continent_code: Option<String>,
34 pub country: Option<String>,
35 pub country_code: Option<String>,
36 pub region: Option<String>,
37 pub region_code: Option<String>,
38 pub city: Option<String>,
39
40 pub latitude: Option<f64>,
41 pub longitude: Option<f64>,
42
43 pub is_eu: Option<bool>,
44 pub postal: Option<String>,
45 pub calling_code: Option<String>,
46 pub capital: Option<String>,
47 pub borders: Option<String>,
49
50 pub flag: Option<Flag>,
51 pub connection: Option<Connection>,
52 pub timezone: Option<Timezone>,
53 pub currency: Option<Currency>,
54 pub security: Option<Security>,
55 pub rate: Option<Rate>,
56
57 pub message: Option<String>,
59 pub error_type: Option<String>,
61
62 #[serde(flatten)]
65 pub extra: HashMap<String, serde_json::Value>,
66}
67
68#[derive(Debug, Clone, Default, Serialize, Deserialize)]
69#[non_exhaustive]
70pub struct Flag {
71 pub img: Option<String>,
72 pub emoji: Option<String>,
73 pub emoji_unicode: Option<String>,
74}
75
76#[derive(Debug, Clone, Default, Serialize, Deserialize)]
77#[non_exhaustive]
78pub struct Connection {
79 pub asn: Option<u64>,
80 pub org: Option<String>,
81 pub isp: Option<String>,
82 pub domain: Option<String>,
83}
84
85#[derive(Debug, Clone, Default, Serialize, Deserialize)]
86#[non_exhaustive]
87pub struct Timezone {
88 pub id: Option<String>,
89 pub abbr: Option<String>,
90 pub is_dst: Option<bool>,
91 pub offset: Option<i64>,
92 pub utc: Option<String>,
93 pub current_time: Option<String>,
94}
95
96#[derive(Debug, Clone, Default, Serialize, Deserialize)]
97#[non_exhaustive]
98pub struct Currency {
99 pub name: Option<String>,
100 pub code: Option<String>,
101 pub symbol: Option<String>,
102 pub plural: Option<String>,
103 pub exchange_rate: Option<f64>,
104}
105
106#[derive(Debug, Clone, Default, Serialize, Deserialize)]
109#[non_exhaustive]
110pub struct Security {
111 pub anonymous: Option<bool>,
112 pub proxy: Option<bool>,
113 pub vpn: Option<bool>,
114 pub tor: Option<bool>,
115 pub hosting: Option<bool>,
116}
117
118#[derive(Debug, Clone, Default, Serialize, Deserialize)]
121#[non_exhaustive]
122pub struct Rate {
123 pub limit: Option<u64>,
124 pub remaining: Option<u64>,
125}