dingtalk_stream/frames/up_message/
callback_message.rs1use 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}