dingtalk_stream/handlers/
callback.rs1use crate::messages::frames::{AckMessage, Headers, MessageBody};
4use async_trait::async_trait;
5
6#[async_trait]
8pub trait CallbackHandler: Send + Sync {
9 async fn process(&self, callback_message: &MessageBody) -> (u16, String) {
11 let _ = callback_message;
12 (AckMessage::STATUS_NOT_IMPLEMENT, "not implement".to_owned())
13 }
14
15 fn pre_start(&self) {}
17
18 async fn raw_process(&self, callback_message: &MessageBody) -> AckMessage {
20 let (code, message) = self.process(callback_message).await;
21 AckMessage {
22 code,
23 headers: Headers {
24 message_id: callback_message.headers.message_id.clone(),
25 content_type: Some(Headers::CONTENT_TYPE_APPLICATION_JSON.to_owned()),
26 ..Default::default()
27 },
28 message: String::new(),
29 data: serde_json::to_string(&serde_json::json!({"response": message}))
30 .unwrap_or_default(),
31 }
32 }
33}
34
35impl CallbackHandler for () {}
36
37pub const TOPIC_CARD_CALLBACK: &str = "/v1.0/card/instances/callback";