Skip to main content

dingtalk_stream/handlers/
system.rs

1//! 系统消息处理器,对齐 Python handlers.py SystemHandler
2
3use crate::messages::frames::{AckMessage, Headers, MessageBody};
4use async_trait::async_trait;
5
6/// 系统消息处理器 trait
7#[async_trait]
8pub trait SystemHandler: Send + Sync {
9    /// 处理系统消息,返回 (状态码, 响应消息)
10    async fn process(&self, system_message: &MessageBody) -> (u16, String) {
11        let _ = system_message;
12        (AckMessage::STATUS_OK, "OK".to_owned())
13    }
14
15    /// 启动前的初始化
16    fn pre_start(&self) {}
17
18    /// 内部处理方法,封装 ACK 构建逻辑
19    async fn raw_process(&self, system_message: &MessageBody) -> AckMessage {
20        let (code, message) = self.process(system_message).await;
21        AckMessage {
22            code,
23            headers: Headers {
24                message_id: system_message.headers.message_id.clone(),
25                content_type: Some(Headers::CONTENT_TYPE_APPLICATION_JSON.to_owned()),
26                ..Default::default()
27            },
28            message,
29            data: system_message.data.clone(),
30        }
31    }
32}
33
34/// 默认系统消息处理器
35pub struct DefaultSystemHandler;
36
37#[async_trait]
38impl SystemHandler for DefaultSystemHandler {}