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