use std::{collections::HashSet, time::Duration};
use crate::{compiler::EventLog, deobfuscation::techniques::Evidence};
#[derive(Debug, Clone)]
pub struct TechniqueResult {
pub id: String,
pub detected: bool,
pub transformed: bool,
pub evidence: Vec<Evidence>,
pub events: EventLog,
pub duration: Duration,
}
pub(crate) struct TechniqueResults {
results: Vec<TechniqueResult>,
recorded_ids: HashSet<String>,
}
impl TechniqueResults {
pub(crate) fn new() -> Self {
Self {
results: Vec::new(),
recorded_ids: HashSet::new(),
}
}
pub(crate) fn record(&mut self, result: TechniqueResult) {
if self.recorded_ids.contains(&result.id) {
return;
}
self.recorded_ids.insert(result.id.clone());
self.results.push(result);
}
pub(crate) fn push(&mut self, result: TechniqueResult) {
self.results.push(result);
}
pub(crate) fn into_vec(self) -> Vec<TechniqueResult> {
self.results
}
}