vt3 0.7.3

VirusTotal REST API v3 (Public & Enterprise)
Documentation
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Root {
    pub data: Data,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Data {
    pub attributes: Option<Attributes>,
    pub id: Option<String>,
    pub links: Option<Links>,
    #[serde(rename = "type")]
    pub _type: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Attributes {
    #[serde(rename = "as_owner")]
    pub as_owner: Option<String>,
    pub asn: Option<i64>,
    pub continent: Option<String>,
    pub country: Option<String>,
    #[serde(rename = "last_analysis_results")]
    pub last_analysis_results: Option<HashMap<String, Engine>>,
    #[serde(rename = "last_analysis_stats")]
    pub last_analysis_stats: Option<LastAnalysisStats>,
    #[serde(rename = "last_https_certificate")]
    pub last_https_certificate: Option<LastHttpsCertificate>,
    #[serde(rename = "last_https_certificate_date")]
    pub last_https_certificate_date: Option<i64>,
    #[serde(rename = "last_modification_date")]
    pub last_modification_date: Option<i64>,
    #[serde(rename = "last_analysis_date")]
    pub last_analysis_date: Option<i64>,
    pub network: Option<String>,
    #[serde(rename = "regional_internet_registry")]
    pub regional_internet_registry: Option<String>,
    pub reputation: Option<i64>,
    pub tags: Option<Vec<String>>,
    #[serde(rename = "total_votes")]
    pub total_votes: Option<TotalVotes>,
    pub whois: Option<String>,
    #[serde(rename = "whois_date")]
    pub whois_date: Option<i64>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Engine {
    pub category: Option<String>,
    #[serde(rename = "engine_name")]
    pub engine_name: Option<String>,
    pub method: Option<String>,
    pub result: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LastAnalysisStats {
    pub harmless: Option<i64>,
    pub malicious: Option<i64>,
    pub suspicious: Option<i64>,
    pub timeout: Option<i64>,
    pub undetected: Option<i64>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LastHttpsCertificate {
    #[serde(rename = "cert_signature")]
    pub cert_signature: Option<CertSignature>,
    pub extensions: Option<Extensions>,
    pub issuer: Option<Issuer>,
    #[serde(rename = "public_key")]
    pub public_key: Option<PublicKey>,
    #[serde(rename = "serial_number")]
    pub serial_number: Option<String>,
    #[serde(rename = "signature_algorithm")]
    pub signature_algorithm: Option<String>,
    pub size: Option<i64>,
    pub subject: Option<Subject>,
    pub thumbprint: Option<String>,
    #[serde(rename = "thumbprint_sha256")]
    pub thumbprint_sha256: Option<String>,
    pub validity: Option<Validity>,
    pub version: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertSignature {
    pub signature: Option<String>,
    #[serde(rename = "signature_algorithm")]
    pub signature_algorithm: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Extensions {
    #[serde(rename = "1.3.6.1.4.1.11129.2.4.2")]
    pub n13614111129242: Option<String>,
    #[serde(rename = "CA")]
    pub ca: Option<bool>,
    #[serde(rename = "authority_key_identifier")]
    pub authority_key_identifier: Option<AuthorityKeyIdentifier>,
    #[serde(rename = "ca_information_access")]
    pub ca_information_access: Option<CaInformationAccess>,
    #[serde(rename = "certificate_policies")]
    pub certificate_policies: Option<Vec<String>>,
    #[serde(rename = "extended_key_usage")]
    pub extended_key_usage: Option<Vec<String>>,
    #[serde(rename = "key_usage")]
    pub key_usage: Option<Vec<String>>,
    #[serde(rename = "subject_alternative_name")]
    pub subject_alternative_name: Option<Vec<String>>,
    #[serde(rename = "subject_key_identifier")]
    pub subject_key_identifier: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AuthorityKeyIdentifier {
    pub keyid: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CaInformationAccess {
    #[serde(rename = "CA Issuers")]
    pub ca_issuers: Option<String>,
    #[serde(rename = "OCSP")]
    pub ocsp: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Issuer {
    #[serde(rename = "C")]
    pub c: Option<String>,
    #[serde(rename = "CN")]
    pub cn: Option<String>,
    #[serde(rename = "O")]
    pub o: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PublicKey {
    pub algorithm: Option<String>,
    pub rsa: Option<Rsa>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Rsa {
    pub exponent: Option<String>,
    #[serde(rename = "key_size")]
    pub key_size: Option<i64>,
    pub modulus: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Subject {
    #[serde(rename = "CN")]
    pub cn: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Validity {
    #[serde(rename = "not_after")]
    pub not_after: Option<String>,
    #[serde(rename = "not_before")]
    pub not_before: Option<String>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TotalVotes {
    pub harmless: Option<i64>,
    pub malicious: Option<i64>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Links {
    #[serde(rename = "self")]
    pub self_field: Option<String>,
}