use serde::{Deserialize, Serialize};
use crate::{entities::keyboard_button::KeyboardButton, utils::deserialize_utils::is_false};
/// This object represents a [custom keyboard](https://core.telegram.org/bots/features#keyboards) with reply options (see [Introduction to bots](https://core.telegram.org/bots/features#keyboards) for details and examples). Not supported in channels and for messages sent on behalf of a Telegram Business account.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#replykeyboardmarkup)
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ReplyKeyboardMarkup {
/// Array of button rows, each represented by an Array of [KeyboardButton](https://core.telegram.org/bots/api/#keyboardbutton) objects
pub keyboard: Vec<Vec<KeyboardButton>>,
/// *Optional*. Requests clients to always show the keyboard when the regular keyboard is hidden. Defaults to *false*, in which case the custom keyboard can be hidden and opened with a keyboard icon.
#[serde(default, skip_serializing_if = "is_false")]
pub is_persistent: bool,
/// *Optional*. Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if there are just two rows of buttons). Defaults to *false*, in which case the custom keyboard is always of the same height as the app's standard keyboard.
#[serde(default, skip_serializing_if = "is_false")]
pub resize_keyboard: bool,
/// *Optional*. Requests clients to hide the keyboard as soon as it's been used. The keyboard will still be available, but clients will automatically display the usual letter-keyboard in the chat - the user can press a special button in the input field to see the custom keyboard again. Defaults to *false*.
#[serde(default, skip_serializing_if = "is_false")]
pub one_time_keyboard: bool,
/// *Optional*. The placeholder to be shown in the input field when the keyboard is active; 1-64 characters
#[serde(default, skip_serializing_if = "Option::is_none")]
pub input_field_placeholder: Option<String>,
/// *Optional*. Use this parameter if you want to show the keyboard to specific users only. Targets: 1) users that are @mentioned in the *text* of the [Message](https://core.telegram.org/bots/api/#message) object; 2) if the bot's message is a reply to a message in the same chat and forum topic, sender of the original message.
///
/// *Example:* A user requests to change the bot's language, bot replies to the request with a keyboard to select the new language. Other users in the group don't see the keyboard.
#[serde(default, skip_serializing_if = "is_false")]
pub selective: bool,
}
// Divider: all content below this line will be preserved after code regen