use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AnalysisResult {
pub category: String,
pub engine_name: String,
pub engine_version: Option<String>,
pub result: Option<String>,
pub method: String,
pub engine_update: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct LastAnalysisStats {
pub harmless: u32,
#[serde(rename = "type-unsupported", default)]
pub type_unsupported: Option<u32>,
pub suspicious: u32,
#[serde(rename = "confirmed-timeout", default)]
pub confirmed_timeout: Option<u32>,
pub timeout: u32,
#[serde(default)]
pub failure: Option<u32>,
pub malicious: u32,
pub undetected: u32,
}
impl LastAnalysisStats {
pub fn av_count(&self) -> u32 {
self.harmless + self.suspicious + self.malicious + self.undetected
}
pub fn safe_count(&self) -> u32 {
self.harmless + self.undetected
}
pub fn error_count(&self) -> u32 {
self.type_unsupported.unwrap_or_default()
+ self.confirmed_timeout.unwrap_or_default()
+ self.timeout
+ self.failure.unwrap_or_default()
}
pub fn is_benign(&self) -> bool {
self.malicious == 0 && self.suspicious == 0
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Votes {
pub harmless: u32,
pub malicious: u32,
}