line_bot_messaging_api/entity/message/
mod.rs1use 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 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}