use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum MenuButton {
Commands(crate::types::MenuButtonCommands),
WebApp(crate::types::MenuButtonWebApp),
Default(crate::types::MenuButtonDefault),
}
impl MenuButton {
#[must_use]
pub fn text(&self) -> Option<&str> {
match self {
Self::WebApp(val) => Some(val.text.as_ref()),
_ => None,
}
}
#[must_use]
pub fn web_app(&self) -> Option<&crate::types::WebAppInfo> {
match self {
Self::WebApp(val) => Some(&val.web_app),
_ => None,
}
}
#[must_use]
pub fn url(&self) -> Option<&str> {
match self {
Self::WebApp(val) => {
let inner = &val.web_app;
Some(inner.url.as_ref())
}
_ => None,
}
}
}
impl From<crate::types::MenuButtonCommands> for MenuButton {
fn from(val: crate::types::MenuButtonCommands) -> Self {
Self::Commands(val)
}
}
impl TryFrom<MenuButton> for crate::types::MenuButtonCommands {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: MenuButton) -> Result<Self, Self::Error> {
if let MenuButton::Commands(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(MenuButton),
stringify!(MenuButtonCommands),
))
}
}
}
impl From<crate::types::MenuButtonWebApp> for MenuButton {
fn from(val: crate::types::MenuButtonWebApp) -> Self {
Self::WebApp(val)
}
}
impl TryFrom<MenuButton> for crate::types::MenuButtonWebApp {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: MenuButton) -> Result<Self, Self::Error> {
if let MenuButton::WebApp(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(MenuButton),
stringify!(MenuButtonWebApp),
))
}
}
}
impl From<crate::types::MenuButtonDefault> for MenuButton {
fn from(val: crate::types::MenuButtonDefault) -> Self {
Self::Default(val)
}
}
impl TryFrom<MenuButton> for crate::types::MenuButtonDefault {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: MenuButton) -> Result<Self, Self::Error> {
if let MenuButton::Default(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(MenuButton),
stringify!(MenuButtonDefault),
))
}
}
}