use std::time::Duration;
use crate::{
compiler::{DerivedStats, EventLog},
deobfuscation::findings::DeobfuscationFindings,
};
#[derive(Debug, Clone)]
pub struct DeobfuscationResult {
pub events: EventLog,
pub findings: DeobfuscationFindings,
pub iterations: usize,
pub total_time: Duration,
}
impl DeobfuscationResult {
#[must_use]
pub fn new(events: EventLog, findings: DeobfuscationFindings) -> Self {
Self {
events,
findings,
iterations: 0,
total_time: Duration::ZERO,
}
}
#[must_use]
pub fn with_timing(mut self, time: Duration, iterations: usize) -> Self {
self.total_time = time;
self.iterations = iterations;
self
}
#[must_use]
pub fn stats(&self) -> DerivedStats {
DerivedStats::from_log(&self.events)
.with_time(self.total_time)
.with_iterations(self.iterations)
}
#[must_use]
pub fn summary(&self) -> String {
self.stats().summary()
}
#[must_use]
pub fn detailed_summary(&self) -> String {
format!(
"Deobfuscation complete: {}\nDetection: {}",
self.stats().summary(),
self.findings.detection_summary()
)
}
}