use crate::common::{AnalysisResult, LastAnalysisStats, Votes};
use std::collections::HashMap;
#[cfg(feature = "chrono")]
use chrono::{
serde::{ts_seconds, ts_seconds_option},
DateTime, Utc,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct IPAttributes {
pub as_owner: Option<String>,
pub asn: Option<u32>,
pub continent: Option<String>,
pub country: Option<String>,
pub jarm: Option<String>,
#[cfg(feature = "chrono")]
#[serde(with = "ts_seconds")]
pub last_analysis_date: DateTime<Utc>,
#[cfg(not(feature = "chrono"))]
pub last_analysis_date: u64,
#[serde(default)]
pub last_analysis_results: HashMap<String, AnalysisResult>,
pub last_analysis_stats: LastAnalysisStats,
#[serde(default)]
pub last_https_certificate: Option<crate::common::certs::SSLCertificate>,
#[cfg(feature = "chrono")]
#[serde(with = "ts_seconds_option", default)]
pub last_https_certificate_date: Option<DateTime<Utc>>,
#[cfg(not(feature = "chrono"))]
#[serde(default)]
pub last_https_certificate_date: Option<u64>,
#[cfg(feature = "chrono")]
#[serde(with = "ts_seconds")]
pub whois_date: DateTime<Utc>,
#[cfg(not(feature = "chrono"))]
pub whois_date: u64,
pub whois: String,
#[cfg(feature = "chrono")]
#[serde(with = "ts_seconds")]
pub last_modification_date: DateTime<Utc>,
#[cfg(not(feature = "chrono"))]
pub last_modification_date: u64,
pub network: String,
pub regional_internet_registry: String,
pub reputation: u64,
pub total_votes: Votes,
#[serde(default)]
pub tags: Vec<String>,
#[serde(default)]
pub rdap: HashMap<String, serde_json::Value>,
#[serde(flatten)]
pub extra: HashMap<String, serde_json::Value>,
}