use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
mod audio;
mod image;
mod image_map;
mod location;
mod sticker;
mod template;
mod text;
mod video;
mod flex;
pub use flex::*;
pub use audio::*;
pub use image::*;
pub use image_map::*;
pub use location::*;
pub use sticker::*;
pub use template::*;
pub use text::*;
pub use video::*;
pub trait LineMessageObject {
fn build(&self) -> Value;
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct LineMessagesBuilder {
pub messages: Vec<Value>,
pub notification_disabled: Option<bool>,
pub custom_aggregation_units: Option<Vec<String>>,
}
impl LineMessagesBuilder {
pub fn new() -> Self {
Self {
messages: vec![],
notification_disabled: None,
custom_aggregation_units: None,
}
}
pub fn set_notification_disabled(&mut self, notification_disabled: bool) {
self.notification_disabled = Some(notification_disabled);
}
pub fn set_custom_aggregation_units(&mut self, custom_aggregation_units: Vec<String>) {
self.custom_aggregation_units = Some(custom_aggregation_units);
}
pub fn append(&mut self, message: impl LineMessageObject) {
self.messages.push(message.build())
}
pub fn to_reply_request(&self, reply_token: String) -> LineApiMessageReplyRequest {
LineApiMessageReplyRequest {
reply_token,
messages: self.messages.clone(),
notification_disabled: self.notification_disabled,
}
}
pub fn to_push_request<T: ToString>(&self, to: T) -> LineApiMessagePushRequest {
LineApiMessagePushRequest {
to: to.to_string(),
messages: self.messages.clone(),
notification_disabled: self.notification_disabled,
custom_aggregation_units: self.custom_aggregation_units.clone(),
}
}
pub fn to_multi_cast_request(&self, to: Vec<String>) -> LineApiMessageMulticastRequest {
LineApiMessageMulticastRequest {
to,
messages: self.messages.clone(),
notification_disabled: self.notification_disabled,
custom_aggregation_units: self.custom_aggregation_units.clone(),
}
}
pub fn to_broad_cast_request(&self) -> LineApiMessageBroadcastRequest {
LineApiMessageBroadcastRequest {
messages: self.messages.clone(),
notification_disabled: self.notification_disabled,
}
}
pub fn to_actions(&self) -> Vec<Value> {
self.messages.clone()
}
}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct LineApiMessageReplyRequest {
#[serde(rename = "notificationDisabled")]
pub reply_token: String,
#[serde(flatten)]
pub messages: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "notificationDisabled")]
pub notification_disabled: Option<bool>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct LineApiMessagePushRequest {
pub to: String,
pub messages: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "notificationDisabled")]
pub notification_disabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "customAggregationUnits")]
pub custom_aggregation_units: Option<Vec<String>>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct LineApiMessageMulticastRequest {
pub to: Vec<String>,
pub messages: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "notificationDisabled")]
pub notification_disabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "customAggregationUnits")]
pub custom_aggregation_units: Option<Vec<String>>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct LineApiMessageBroadcastRequest {
pub messages: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "notificationDisabled")]
pub notification_disabled: Option<bool>,
}