use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SmtpEvent {
Sent {
queue_id: String,
to: String,
relay_hostname: String,
relay_ip: Option<String>,
relay_port: Option<u16>,
delay: f64,
delay_before_queue: Option<f64>,
delay_in_queue: Option<f64>,
delay_connection: Option<f64>,
delay_transmission: Option<f64>,
dsn: Option<String>,
status: String,
message_size: Option<u64>,
},
Deferred {
queue_id: String,
to: Option<String>,
relay_hostname: Option<String>,
relay_ip: Option<String>,
relay_port: Option<u16>,
delay: Option<f64>,
delay_before_queue: Option<f64>,
delay_in_queue: Option<f64>,
delay_connection: Option<f64>,
delay_transmission: Option<f64>,
dsn: Option<String>,
status: String,
defer_reason: String,
},
Bounced {
queue_id: String,
to: String,
relay_hostname: Option<String>,
relay_ip: Option<String>,
relay_port: Option<u16>,
delay: Option<f64>,
delay_before_queue: Option<f64>,
delay_in_queue: Option<f64>,
delay_connection: Option<f64>,
delay_transmission: Option<f64>,
dsn: Option<String>,
status: String,
bounce_reason: String,
},
ConnectionTimeout {
queue_id: String,
target_hostname: String,
target_ip: String,
target_port: u16,
timeout_duration: Option<u32>,
},
ConnectionRefused {
queue_id: String,
target_hostname: String,
target_ip: String,
target_port: u16,
},
ConnectionLost {
queue_id: String,
target_hostname: String,
target_ip: String,
lost_stage: String,
},
ProtocolInteraction {
queue_id: String,
interaction_type: String,
details: String,
},
Other {
queue_id: Option<String>,
event_type: String,
message: String,
},
}
impl SmtpEvent {
pub fn event_type(&self) -> &'static str {
match self {
SmtpEvent::Sent { .. } => "sent",
SmtpEvent::Deferred { .. } => "deferred",
SmtpEvent::Bounced { .. } => "bounced",
SmtpEvent::ConnectionTimeout { .. } => "connection_timeout",
SmtpEvent::ConnectionRefused { .. } => "connection_refused",
SmtpEvent::ConnectionLost { .. } => "connection_lost",
SmtpEvent::ProtocolInteraction { .. } => "protocol_interaction",
SmtpEvent::Other { .. } => "other",
}
}
pub fn queue_id(&self) -> Option<&str> {
match self {
SmtpEvent::Sent { queue_id, .. } => Some(queue_id),
SmtpEvent::Deferred { queue_id, .. } => Some(queue_id),
SmtpEvent::Bounced { queue_id, .. } => Some(queue_id),
SmtpEvent::ConnectionTimeout { queue_id, .. } => Some(queue_id),
SmtpEvent::ConnectionRefused { queue_id, .. } => Some(queue_id),
SmtpEvent::ConnectionLost { queue_id, .. } => Some(queue_id),
SmtpEvent::ProtocolInteraction { queue_id, .. } => Some(queue_id),
SmtpEvent::Other { queue_id, .. } => queue_id.as_deref(),
}
}
}