use serde::{Deserialize, Serialize};
use super::keyboard_button_poll_type::KeyboardButtonPollType;
use super::keyboard_button_request::{
KeyboardButtonRequestChat, KeyboardButtonRequestManagedBot, KeyboardButtonRequestUsers,
};
use super::web_app_info::WebAppInfo;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[non_exhaustive]
pub struct KeyboardButton {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_contact: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_location: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_poll: Option<KeyboardButtonPollType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub web_app: Option<WebAppInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_users: Option<KeyboardButtonRequestUsers>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_chat: Option<KeyboardButtonRequestChat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_managed_bot: Option<KeyboardButtonRequestManagedBot>,
#[serde(skip_serializing_if = "Option::is_none")]
pub style: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon_custom_emoji_id: Option<String>,
}
impl KeyboardButton {
pub fn text(text: impl Into<String>) -> Self {
Self {
text: text.into(),
..Default::default()
}
}
pub fn request_contact(text: impl Into<String>) -> Self {
Self {
text: text.into(),
request_contact: Some(true),
..Default::default()
}
}
pub fn request_location(text: impl Into<String>) -> Self {
Self {
text: text.into(),
request_location: Some(true),
..Default::default()
}
}
}
impl From<&str> for KeyboardButton {
fn from(text: &str) -> Self {
Self::text(text)
}
}
impl From<String> for KeyboardButton {
fn from(text: String) -> Self {
Self::text(text)
}
}