line_bot_messaging_api/entity/message/
mod.rs

1use serde_derive::{Deserialize, Serialize};
2use serde_json::Value;
3
4mod audio;
5mod flex;
6mod image;
7mod image_map;
8mod location;
9mod sticker;
10mod template;
11mod text;
12mod video;
13
14pub use audio::*;
15pub use flex::*;
16pub use image::*;
17pub use image_map::*;
18pub use location::*;
19pub use sticker::*;
20pub use template::*;
21pub use text::*;
22pub use video::*;
23
24pub trait LineMessageObject {
25    fn build(&self) -> Value;
26}
27
28#[derive(Debug, Default, Clone, Serialize, Deserialize)]
29pub struct LineMessagesBuilder {
30    pub messages: Vec<Value>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub notification_disabled: Option<bool>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub custom_aggregation_units: Option<Vec<String>>,
35}
36
37impl LineMessagesBuilder {
38    pub fn new() -> Self {
39        Self {
40            messages: vec![],
41            notification_disabled: None,
42            custom_aggregation_units: None,
43        }
44    }
45    pub fn set_notification_disabled(&mut self, notification_disabled: bool) {
46        self.notification_disabled = Some(notification_disabled);
47    }
48    pub fn set_custom_aggregation_units(&mut self, custom_aggregation_units: Vec<String>) {
49        self.custom_aggregation_units = Some(custom_aggregation_units);
50    }
51    pub fn append(&mut self, message: impl LineMessageObject) {
52        self.messages.push(message.build())
53    }
54
55    pub fn to_reply_request(&self, reply_token: String) -> LineApiMessageReplyRequest {
56        LineApiMessageReplyRequest {
57            reply_token,
58            messages: self.messages.clone(),
59            notification_disabled: self.notification_disabled,
60        }
61    }
62    pub fn to_push_request<T: ToString>(&self, to: T) -> LineApiMessagePushRequest {
63        LineApiMessagePushRequest {
64            to: to.to_string(),
65            messages: self.messages.clone(),
66            notification_disabled: self.notification_disabled,
67            custom_aggregation_units: self.custom_aggregation_units.clone(),
68        }
69    }
70    pub fn to_multi_cast_request(&self, to: Vec<String>) -> LineApiMessageMulticastRequest {
71        LineApiMessageMulticastRequest {
72            to,
73            messages: self.messages.clone(),
74            notification_disabled: self.notification_disabled,
75            custom_aggregation_units: self.custom_aggregation_units.clone(),
76        }
77    }
78    pub fn to_broad_cast_request(&self) -> LineApiMessageBroadcastRequest {
79        LineApiMessageBroadcastRequest {
80            messages: self.messages.clone(),
81            notification_disabled: self.notification_disabled,
82        }
83    }
84    pub fn to_actions(&self) -> Vec<Value> {
85        self.messages.clone()
86    }
87}
88
89#[derive(Debug, Default, Deserialize, Serialize, Clone)]
90pub struct LineApiMessageReplyRequest {
91    #[serde(rename = "replyToken")]
92    pub reply_token: String,
93    // #[serde(flatten)]
94    pub messages: Vec<Value>,
95    #[serde(skip_serializing_if = "Option::is_none")]
96    #[serde(rename = "notificationDisabled")]
97    pub notification_disabled: Option<bool>,
98}
99
100#[derive(Debug, Default, Deserialize, Serialize, Clone)]
101pub struct LineApiMessagePushRequest {
102    pub to: String,
103    pub messages: Vec<Value>,
104    #[serde(skip_serializing_if = "Option::is_none")]
105    #[serde(rename = "notificationDisabled")]
106    pub notification_disabled: Option<bool>,
107    #[serde(skip_serializing_if = "Option::is_none")]
108    #[serde(rename = "customAggregationUnits")]
109    pub custom_aggregation_units: Option<Vec<String>>,
110}
111
112#[derive(Debug, Default, Deserialize, Serialize, Clone)]
113pub struct LineApiMessageMulticastRequest {
114    pub to: Vec<String>,
115    pub messages: Vec<Value>,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    #[serde(rename = "notificationDisabled")]
118    pub notification_disabled: Option<bool>,
119    #[serde(skip_serializing_if = "Option::is_none")]
120    #[serde(rename = "customAggregationUnits")]
121    pub custom_aggregation_units: Option<Vec<String>>,
122}
123
124#[derive(Debug, Default, Deserialize, Serialize, Clone)]
125pub struct LineApiMessageBroadcastRequest {
126    pub messages: Vec<Value>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    #[serde(rename = "notificationDisabled")]
129    pub notification_disabled: Option<bool>,
130}