use crate::models::serde_helpers::option_is_none_or_default;
use base64::Engine;
use serde::{Deserialize, Serialize};
use super::{
ActionButton, InputNotify, MediaInfo, MessageCreateType, PromptKeyboard, SendType, Stream,
option_message_type_is_none_or_zero,
};
use crate::models::message::{Ark, Embed, Keyboard, MarkdownPayload, Reference};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct MessageToCreate {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub content: Option<String>,
#[serde(skip_serializing_if = "option_message_type_is_none_or_zero")]
pub msg_type: Option<MessageCreateType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embed: Option<Embed>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ark: Option<Ark>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub image: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub msg_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_reference: Option<Reference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub markdown: Option<MarkdownPayload>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keyboard: Option<Keyboard>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub event_id: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub timestamp: Option<i64>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub msg_seq: Option<u32>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub subscribe_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_notify: Option<InputNotify>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media: Option<MediaInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_keyboard: Option<PromptKeyboard>,
#[serde(skip_serializing_if = "Option::is_none")]
pub action_button: Option<ActionButton>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<Stream>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub feature_id: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_image: Option<String>,
}
impl MessageToCreate {
pub fn new_text(content: impl Into<String>) -> Self {
Self {
content: Some(content.into()),
..Default::default()
}
}
pub fn with_file_image(mut self, data: &[u8]) -> Self {
self.file_image = Some(base64::engine::general_purpose::STANDARD.encode(data));
self
}
pub fn with_reply(mut self, message_id: impl Into<String>) -> Self {
self.msg_id = Some(message_id.into());
self
}
pub const fn send_type(&self) -> SendType {
SendType::Text
}
#[allow(non_snake_case)]
pub fn GetEventID(&self) -> &str {
self.event_id.as_deref().unwrap_or("")
}
#[allow(non_snake_case)]
pub const fn GetSendType(&self) -> SendType {
self.send_type()
}
}