airlabs-api 0.0.2

airlabs.co API data types
Documentation
use super::*;

mod impls;

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Request {
    pub lang: String,
    pub currency: String,
    pub time: u64,
    pub id: String,
    pub server: String,
    pub host: String,
    pub pid: u64,
    pub key: Key,
    pub params: BTreeMap<String, String>,
    pub version: u64,
    pub method: String,
    pub client: ClientInfo,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Key {
    pub id: u64,
    pub api_key: String,
    pub r#type: String,
    #[serde(with = "time::serde::rfc3339")]
    pub expired: time::OffsetDateTime,
    #[serde(with = "time::serde::rfc3339")]
    pub registered: time::OffsetDateTime,
    pub upgraded: Option<String>,
    pub limits_by_hour: u64,
    pub limits_by_minute: u64,
    pub limits_by_month: u64,
    pub limits_total: u64,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Params {
    pub params: BTreeMap<String, String>,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ClientInfo {
    pub ip: String,
    pub geo: GeoInfo,
    pub connection: ConnectionInfo,
    pub device: BTreeMap<String, String>,
    pub agent: BTreeMap<String, String>,
    pub karma: Karma,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GeoInfo {
    pub country_code: String,
    pub country: String,
    pub continent: String,
    pub city: String,
    pub lat: f64,
    pub lng: f64,
    pub timezone: String,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ConnectionInfo {
    pub r#type: Option<String>,
    pub isp_code: Option<u64>,
    pub isp_name: Option<String>,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Karma {
    pub is_blocked: bool,
    pub is_crawler: bool,
    pub is_bot: bool,
    pub is_friend: bool,
    pub is_regular: bool,
}