Skip to main content

dingtalk_stream/frames/up_message/
callback_message.rs

1use crate::frames::DingTalkUserId;
2use serde::{Deserialize, Serialize};
3use std::sync::Arc;
4
5#[derive(Serialize, Deserialize)]
6pub struct WebhookMessage {
7    #[serde(flatten)]
8    pub content: super::MessageContent,
9    #[serde(rename = "at")]
10    pub at: WebhookMessageAt,
11    #[serde(skip)]
12    pub send_result_cb:
13        Option<Arc<dyn Fn(Result<(u16, String), anyhow::Error>) + Send + Sync + 'static>>,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, Default)]
17#[serde(default)]
18pub struct WebhookMessageAt {
19    #[serde(rename = "isAtAll")]
20    pub at_all: bool,
21    #[serde(rename = "atUserIds")]
22    pub at_user_ids: Option<Vec<DingTalkUserId>>,
23}
24
25impl WebhookMessageAt {
26    pub fn at_all() -> Self {
27        Self {
28            at_all: true,
29            at_user_ids: None,
30        }
31    }
32}
33
34impl From<DingTalkUserId> for WebhookMessageAt {
35    fn from(value: DingTalkUserId) -> Self {
36        Self {
37            at_all: false,
38            at_user_ids: Some(vec![value]),
39        }
40    }
41}
42
43impl From<&DingTalkUserId> for WebhookMessageAt {
44    fn from(value: &DingTalkUserId) -> Self {
45        value.clone().into()
46    }
47}