use serde::{Deserialize, Serialize}; use teloxide::types::InlineKeyboardButton; use crate::{ db::{callback_info::CallbackInfo, CallDB}, BotResult, }; #[macro_export] macro_rules! single_button_markup { ($button:expr) => { InlineKeyboardMarkup { inline_keyboard: vec![vec![$button]], } }; } #[macro_export] macro_rules! stacked_buttons_markup { ($( $button:expr ),+) => { InlineKeyboardMarkup { inline_keyboard: vec![ $( vec![$button] )* ], } }; } pub async fn create_callback_button( literal: &str, ci: CallbackInfo, db: &mut D, ) -> BotResult where C: Serialize + for<'a> Deserialize<'a> + Send + Sync, D: CallDB + Send, { let text = db .get_literal_value(literal) .await? .unwrap_or("Please, set content of this message".into()); let ci = ci.store(db).await?; Ok(InlineKeyboardButton::new( text, teloxide::types::InlineKeyboardButtonKind::CallbackData(ci.get_id()), )) }