use crate::models::serde_helpers::{option_is_none_or_default, serialize_option_as_default};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Ark {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub template_id: Option<u32>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub kv: Option<Vec<ArkKv>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct MessageArk {
#[serde(skip_serializing_if = "Option::is_none")]
pub ark: Option<Ark>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ArkKv {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub key: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub value: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub obj: Option<Vec<ArkObj>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ArkObj {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub obj_kv: Option<Vec<ArkObjKv>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ArkObjKv {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub key: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub value: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Embed {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub title: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub description: Option<String>,
#[serde(default)]
pub prompt: String,
#[serde(default)]
pub thumbnail: EmbedThumbnail,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub fields: Option<Vec<EmbedField>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct EmbedThumbnail {
#[serde(default)]
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct EmbedField {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub name: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub value: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Keyboard {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<KeyboardContent>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardContent {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub rows: Option<Vec<KeyboardRow>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub style: Option<KeyboardStyle>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardStyle {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub font_size: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardRow {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub buttons: Option<Vec<KeyboardButton>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardButton {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub render_data: Option<KeyboardButtonRenderData>,
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<KeyboardButtonAction>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub group_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardButtonRenderData {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub label: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub visited_label: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub style: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardButtonAction {
#[serde(rename = "type", skip_serializing_if = "option_is_none_or_default")]
pub action_type: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission: Option<KeyboardButtonPermission>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub click_limit: Option<u32>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub data: Option<String>,
#[serde(default)]
pub enter: bool,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub at_bot_show_channel_list: Option<bool>,
#[serde(default)]
pub subscribe_data: KeyboardSubscribeData,
#[serde(skip_serializing_if = "Option::is_none")]
pub modal: Option<KeyboardModal>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardButtonPermission {
#[serde(rename = "type", skip_serializing_if = "option_is_none_or_default")]
pub permission_type: Option<u32>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub specify_role_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub specify_user_ids: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct KeyboardSubscribeData {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub template_ids: Option<Vec<KeyboardTemplateId>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct KeyboardTemplateId {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub template_id: Option<u32>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub custom_template_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct KeyboardModal {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub content: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub confirm_text: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub cancel_text: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct KeyboardPayload {
pub content: serde_json::Value,
}
impl From<KeyboardPayload> for Keyboard {
fn from(payload: KeyboardPayload) -> Self {
serde_json::from_value(payload.content).unwrap_or_default()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct MarkdownPayload {
#[serde(default, serialize_with = "serialize_option_as_default")]
pub template_id: Option<i32>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub custom_template_id: Option<String>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub params: Option<Vec<MarkdownParam>>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub content: Option<String>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub style: Option<MarkdownStyle>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub process_msg: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct MarkdownStyle {
#[serde(default, serialize_with = "serialize_option_as_default")]
pub main_font_size: Option<String>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub layout: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MarkdownParam {
#[serde(default, serialize_with = "serialize_option_as_default")]
pub key: Option<String>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub values: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Media {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file_uuid: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file_info: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Reference {
#[serde(default, serialize_with = "serialize_option_as_default")]
pub message_id: Option<String>,
#[serde(default, serialize_with = "serialize_option_as_default")]
pub ignore_get_message_error: Option<bool>,
}