use crate::models::serde_helpers::option_is_none_or_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>>,
}
pub type ArkKV = ArkKv;
#[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>,
}
pub type ArkObjKV = ArkObjKv;
#[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,
}
pub type MessageEmbedThumbnail = EmbedThumbnail;
#[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>,
}
pub type ActionType = u32;
pub type PermissionType = u32;
pub const ACTION_TYPE_URL: ActionType = 0;
pub const ACTION_TYPE_CALLBACK: ActionType = 1;
pub const ACTION_TYPE_AT_BOT: ActionType = 2;
pub const ACTION_TYPE_MQQ_API: ActionType = 3;
pub const ACTION_TYPE_SUBSCRIBE: ActionType = 4;
#[allow(non_upper_case_globals)]
pub const ActionTypeURL: ActionType = ACTION_TYPE_URL;
#[allow(non_upper_case_globals)]
pub const ActionTypeCallback: ActionType = ACTION_TYPE_CALLBACK;
#[allow(non_upper_case_globals)]
pub const ActionTypeAtBot: ActionType = ACTION_TYPE_AT_BOT;
#[allow(non_upper_case_globals)]
pub const ActionTypeMQQAPI: ActionType = ACTION_TYPE_MQQ_API;
#[allow(non_upper_case_globals)]
pub const ActionTypeSubscribe: ActionType = ACTION_TYPE_SUBSCRIBE;
pub const PERMISSION_TYPE_SPECIFY_USER_IDS: PermissionType = 0;
pub const PERMISSION_TYPE_MANAGER: PermissionType = 1;
pub const PERMISSION_TYPE_ALL: PermissionType = 2;
pub const PERMISSION_TYPE_SPECIFY_ROLE_IDS: PermissionType = 3;
#[allow(non_upper_case_globals)]
pub const PermissionTypeSpecifyUserIDs: PermissionType = PERMISSION_TYPE_SPECIFY_USER_IDS;
#[allow(non_upper_case_globals)]
pub const PermissionTypManager: PermissionType = PERMISSION_TYPE_MANAGER;
#[allow(non_upper_case_globals)]
pub const PermissionTypAll: PermissionType = PERMISSION_TYPE_ALL;
#[allow(non_upper_case_globals)]
pub const PermissionTypSpecifyRoleIDs: PermissionType = PERMISSION_TYPE_SPECIFY_ROLE_IDS;
pub type MessageKeyboard = Keyboard;
pub type CustomKeyboard = KeyboardContent;
pub type Row = KeyboardRow;
pub type Button = KeyboardButton;
pub type RenderData = KeyboardButtonRenderData;
pub type Action = KeyboardButtonAction;
pub type Permission = KeyboardButtonPermission;
pub type SubscribeData = KeyboardSubscribeData;
pub type TemplateID = KeyboardTemplateId;
pub type Modal = KeyboardModal;
#[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,
}
pub type Markdown = MarkdownPayload;
pub type MarkdownParams = MarkdownParam;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct MarkdownPayload {
#[serde(skip_serializing_if = "Option::is_none")]
pub template_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_template_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<Vec<MarkdownParam>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub style: Option<MarkdownStyle>,
#[serde(skip_serializing_if = "Option::is_none")]
pub process_msg: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct MarkdownStyle {
#[serde(skip_serializing_if = "Option::is_none")]
pub main_font_size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layout: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MarkdownParam {
pub key: Option<String>,
pub values: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Media {
pub file_info: Option<String>,
pub ttl: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Reference {
pub message_id: Option<String>,
pub ignore_get_message_error: Option<bool>,
}