use super::edge::ProvenanceEdge;
use super::node::{NodeId, ProvenanceNode};
#[derive(Debug, Clone)]
pub struct AttackPath {
pub nodes: Vec<(NodeId, ProvenanceNode)>,
pub edges: Vec<ProvenanceEdge>,
pub duration_ns: u64,
pub anomaly_indices: Vec<usize>,
}
impl AttackPath {
pub fn len(&self) -> usize {
self.nodes.len()
}
pub fn is_empty(&self) -> bool {
self.nodes.is_empty()
}
pub fn has_anomalies(&self) -> bool {
!self.anomaly_indices.is_empty()
}
}
#[derive(Debug, Clone)]
pub struct Anomaly {
pub node_id: NodeId,
pub description: String,
pub severity: f32,
}