use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use struct_metadata::Described;
use crate::{ElasticMeta, Readable, types::{ExpandingClassification, Text}};
#[derive(Debug, Serialize, Deserialize, Described, Clone)]
#[metadata_type(ElasticMeta)]
#[metadata(index=true, store=true)]
pub struct Heuristic {
#[metadata(copyto="__text__")]
#[serde(default)]
pub attack_id: Vec<String>,
#[serde(flatten)]
pub classification: ExpandingClassification,
#[metadata(copyto="__text__")]
pub description: Text,
#[metadata(copyto="__text__")]
pub filetype: String,
#[metadata(copyto="__text__")]
pub heur_id: String,
#[metadata(copyto="__text__")]
pub name: String,
pub score: i32,
#[serde(default)]
pub signature_score_map: HashMap<String, i32>,
#[serde(default)]
pub stats: Statistics,
pub max_score: Option<i32>,
}
impl Readable for Heuristic {
fn set_from_archive(&mut self, _from_archive: bool) {}
}
#[derive(Debug, Serialize, Deserialize, Described, Default, Clone)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=true, store=true)]
pub struct Statistics {
pub count: i32,
pub min: i32,
pub max: i32,
pub avg: i32,
pub sum: i32,
pub first_hit: Option<chrono::DateTime<chrono::Utc>>,
pub last_hit: Option<chrono::DateTime<chrono::Utc>>,
}