use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LookupResponse {
#[serde(default)]
pub success: bool,
pub ip: Option<String>,
#[serde(rename = "type")]
pub ip_type: Option<String>,
pub continent: Option<String>,
pub continent_code: Option<String>,
pub country: Option<String>,
pub country_code: Option<String>,
pub region: Option<String>,
pub region_code: Option<String>,
pub city: Option<String>,
pub latitude: Option<f64>,
pub longitude: Option<f64>,
pub is_eu: Option<bool>,
pub postal: Option<String>,
pub calling_code: Option<String>,
pub capital: Option<String>,
pub borders: Option<String>,
pub flag: Option<Flag>,
pub connection: Option<Connection>,
pub timezone: Option<Timezone>,
pub currency: Option<Currency>,
pub security: Option<Security>,
pub rate: Option<Rate>,
pub message: Option<String>,
pub error_type: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Flag {
pub img: Option<String>,
pub emoji: Option<String>,
pub emoji_unicode: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Connection {
pub asn: Option<u64>,
pub org: Option<String>,
pub isp: Option<String>,
pub domain: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Timezone {
pub id: Option<String>,
pub abbr: Option<String>,
pub is_dst: Option<bool>,
pub offset: Option<i64>,
pub utc: Option<String>,
pub current_time: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Currency {
pub name: Option<String>,
pub code: Option<String>,
pub symbol: Option<String>,
pub plural: Option<String>,
pub exchange_rate: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Security {
pub anonymous: Option<bool>,
pub proxy: Option<bool>,
pub vpn: Option<bool>,
pub tor: Option<bool>,
pub hosting: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Rate {
pub limit: Option<u64>,
pub remaining: Option<u64>,
}