use std::collections::HashMap; use rocket::serde::{self, json, Serialize}; use ipinfo::{ AbuseDetails, AsnDetails, CarrierDetails, CompanyDetails, DomainsDetails, IpDetails, PrivacyDetails, }; use serde_with::SerializeAs; #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "AsnDetails" )] pub struct AsnDetailsDef { pub asn: String, pub name: String, pub domain: String, pub route: String, pub asn_type: String, } impl SerializeAs for AsnDetailsDef { fn serialize_as(value: &AsnDetails, serializer: S) -> Result where S: serde::Serializer, { AsnDetailsDef::serialize(value, serializer) } } #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "CompanyDetails" )] pub struct CompanyDetailsDef { pub name: String, pub domain: String, pub company_type: String, } impl SerializeAs for CompanyDetailsDef { fn serialize_as(value: &CompanyDetails, serializer: S) -> Result where S: serde::Serializer, { CompanyDetailsDef::serialize(value, serializer) } } #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "CarrierDetails" )] pub struct CarrierDetailsDef { pub name: String, pub mcc: String, pub mnc: String, } impl SerializeAs for CarrierDetailsDef { fn serialize_as(value: &CarrierDetails, serializer: S) -> Result where S: serde::Serializer, { CarrierDetailsDef::serialize(value, serializer) } } #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "PrivacyDetails" )] pub struct PrivacyDetailsDef { pub vpn: bool, pub proxy: bool, pub tor: bool, pub hosting: bool, } impl SerializeAs for PrivacyDetailsDef { fn serialize_as(value: &PrivacyDetails, serializer: S) -> Result where S: serde::Serializer, { PrivacyDetailsDef::serialize(value, serializer) } } #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "AbuseDetails" )] pub struct AbuseDetailsDef { pub address: String, pub country: String, pub email: String, pub name: String, pub network: String, pub phone: String, } impl SerializeAs for AbuseDetailsDef { fn serialize_as(value: &AbuseDetails, serializer: S) -> Result where S: serde::Serializer, { AbuseDetailsDef::serialize(value, serializer) } } #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "DomainsDetails" )] pub struct DomainsDetailsDef { pub ip: Option, pub total: u64, pub domains: Vec, } impl SerializeAs for DomainsDetailsDef { fn serialize_as(value: &DomainsDetails, serializer: S) -> Result where S: serde::Serializer, { DomainsDetailsDef::serialize(value, serializer) } } #[serde_as] #[skip_serializing_none] #[derive(Serialize)] #[serde( crate = "rocket::serde", rename_all = "camelCase", remote = "IpDetails" )] pub struct IpDetailsDef { pub ip: String, pub hostname: Option, pub city: String, pub region: String, pub country: String, pub loc: String, pub org: Option, pub postal: Option, pub timezone: Option, #[serde_as(as = "Option")] pub asn: Option, #[serde_as(as = "Option")] pub company: Option, #[serde_as(as = "Option")] pub carrier: Option, #[serde_as(as = "Option")] pub privacy: Option, #[serde_as(as = "Option")] pub abuse: Option, #[serde_as(as = "Option")] pub domains: Option, #[serde(flatten)] pub extra: HashMap, } impl SerializeAs for IpDetailsDef { fn serialize_as(value: &IpDetails, serializer: S) -> Result where S: serde::Serializer, { IpDetailsDef::serialize(value, serializer) } }