use super::{InlineKeyboardMarkup, InputMessageContent};
use crate::enums::InlineQueryResultType;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct InlineQueryResultCachedSticker {
    #[serde(rename = "type", default = "sticker")]
    pub result_type: String,
    pub id: String,
    pub sticker_file_id: String,
    pub reply_markup: Option<InlineKeyboardMarkup>,
    pub input_message_content: Option<InputMessageContent>,
}
impl InlineQueryResultCachedSticker {
    #[must_use]
    pub fn new(id: impl Into<String>, sticker_file_id: impl Into<String>) -> Self {
        Self {
            id: id.into(),
            sticker_file_id: sticker_file_id.into(),
            ..Default::default()
        }
    }
    #[must_use]
    pub fn id(self, val: impl Into<String>) -> Self {
        Self {
            id: val.into(),
            ..self
        }
    }
    #[must_use]
    pub fn sticker_file_id(self, val: impl Into<String>) -> Self {
        Self {
            sticker_file_id: val.into(),
            ..self
        }
    }
    #[must_use]
    pub fn reply_markup(self, val: impl Into<InlineKeyboardMarkup>) -> Self {
        Self {
            reply_markup: Some(val.into()),
            ..self
        }
    }
    #[must_use]
    pub fn input_message_content(self, val: impl Into<InputMessageContent>) -> Self {
        Self {
            input_message_content: Some(val.into()),
            ..self
        }
    }
}
impl Default for InlineQueryResultCachedSticker {
    #[must_use]
    fn default() -> Self {
        Self {
            result_type: sticker(),
            id: String::default(),
            sticker_file_id: String::default(),
            reply_markup: None,
            input_message_content: None,
        }
    }
}
fn sticker() -> String {
    InlineQueryResultType::Sticker.into()
}