postfix-log-parser 0.2.0

高性能模块化Postfix日志解析器,经3.2GB生产数据验证,SMTPD事件100%准确率
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

/// Postsuper事件类型
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum PostsuperEventType {
    /// 邮件删除事件 - 删除单个邮件
    MessageRemoved,
    /// 批量删除事件 - 显示删除统计
    BulkDeleted,
}

/// Postsuper事件
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PostsuperEvent {
    /// 事件类型
    pub event_type: PostsuperEventType,
    /// 时间戳
    pub timestamp: DateTime<Utc>,
    /// 队列ID(对于单个邮件删除)
    pub queue_id: Option<String>,
    /// 删除的邮件数量(对于批量删除)
    pub message_count: Option<u32>,
    /// 操作描述
    pub description: Option<String>,
}

impl PostsuperEvent {
    /// 创建邮件删除事件
    pub fn message_removed(timestamp: DateTime<Utc>, queue_id: String) -> Self {
        Self {
            event_type: PostsuperEventType::MessageRemoved,
            timestamp,
            queue_id: Some(queue_id),
            message_count: None,
            description: Some("removed".to_string()),
        }
    }

    /// 创建批量删除事件
    pub fn bulk_deleted(timestamp: DateTime<Utc>, message_count: u32) -> Self {
        Self {
            event_type: PostsuperEventType::BulkDeleted,
            timestamp,
            queue_id: None,
            message_count: Some(message_count),
            description: Some(format!(
                "Deleted: {} message{}",
                message_count,
                if message_count != 1 { "s" } else { "" }
            )),
        }
    }
}