use std::collections::HashMap; use teloxide::types::{InlineKeyboardButton, InlineKeyboardMarkup}; /// Create a new InlineKeyboardMarkup from an `hashmap` defined as `:` pub async fn make_inline_keyboard( hashmap: &Option>, callback_type: &str, chat_id: i64, ) -> InlineKeyboardMarkup { // This is an array of array because the `InlineKeyboardMarkup` // considers each array as a row. // So, using this format Vec> will print a button // in `n` different rows in only 1 column. let mut keyboard_array: Vec> = vec![]; if let Some(options) = hashmap { for (key, value) in options { keyboard_array.push(vec![InlineKeyboardButton::callback( value.clone(), format!("{}_{}_{}", chat_id, callback_type, key), )]); } } else { // If the response of the Option ``callback_type`` is None, just answer // an useless button with a text. // I still don't know if it's a good idea to use a callback instead of // a normal text button, but I could handle any such kind of callback keyboard_array.push(vec![InlineKeyboardButton::callback( "No such element".to_string(), "".into(), )]); } // The `new` method accepts an interator InlineKeyboardMarkup::new(keyboard_array) }