use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreatType {
Spam,
Phishing,
Malware,
Botnet,
Pup,
Unknown(u8),
}
impl ThreatType {
pub fn from_ip_last_octet(octet: u8) -> Self {
match octet {
2 | 9 => ThreatType::Spam,
3 => ThreatType::Phishing,
4 | 6 | 7 | 11 => ThreatType::Malware,
5 => ThreatType::Botnet,
10 => ThreatType::Pup,
_ => ThreatType::Unknown(octet),
}
}
pub fn description(&self) -> &'static str {
match self {
ThreatType::Spam => "Spam Source",
ThreatType::Phishing => "Phishing Website",
ThreatType::Malware => "Malware",
ThreatType::Botnet => "Botnet",
ThreatType::Pup => "Potentially Unwanted Program",
ThreatType::Unknown(_) => "Unknown Threat Type",
}
}
pub fn severity_level(&self) -> u8 {
match self {
ThreatType::Malware => 5,
ThreatType::Phishing => 4,
ThreatType::Botnet => 4,
ThreatType::Spam => 2,
ThreatType::Pup => 1,
ThreatType::Unknown(_) => 3,
}
}
}