Skip to main content

dingtalk_stream/frames/up_message/
robot_message.rs

1/*
2
3*/
4use crate::frames::{DingTalkGroupConversationId, DingTalkUserId, OptionSendMessageCallback};
5use serde::{Deserialize, Serialize};
6#[derive(Clone, Serialize, Deserialize)]
7pub enum RobotMessage {
8    Private {
9        message: RobotPrivateMessage,
10        #[serde(skip)]
11        send_result_cb: OptionSendMessageCallback,
12    },
13    Group {
14        message: RobotGroupMessage,
15        #[serde(skip)]
16        send_result_cb: OptionSendMessageCallback,
17    },
18}
19
20impl RobotMessage {
21    pub fn with_cb<T: Into<OptionSendMessageCallback>>(self, cb: T) -> Self {
22        match self {
23            RobotMessage::Private { message, .. } => Self::Private {
24                message,
25                send_result_cb: cb.into(),
26            },
27            RobotMessage::Group { message, .. } => Self::Group {
28                message,
29                send_result_cb: cb.into(),
30            },
31        }
32    }
33}
34
35#[derive(Clone, Serialize, Deserialize)]
36pub struct RobotPrivateMessage {
37    pub user_ids: Vec<DingTalkUserId>,
38    pub content: super::MessageContent,
39}
40
41impl From<RobotPrivateMessage> for RobotMessage {
42    fn from(message: RobotPrivateMessage) -> Self {
43        Self::Private {
44            message,
45            send_result_cb: Default::default(),
46        }
47    }
48}
49
50#[derive(Clone, Serialize, Deserialize)]
51pub struct RobotGroupMessage {
52    pub group_id: DingTalkGroupConversationId,
53    pub content: super::MessageContent,
54}
55
56impl From<RobotGroupMessage> for RobotMessage {
57    fn from(message: RobotGroupMessage) -> Self {
58        Self::Group {
59            message,
60            send_result_cb: Default::default(),
61        }
62    }
63}