use serde::{Deserialize, Serialize};
use crate::{Request, API};
use super::user::User;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct InlineQuery {
pub id: String,
pub from: User,
pub query: String,
pub offset: String,
}
#[derive(Debug, Serialize, Clone, Default)]
pub struct AnswerInlineQuery {
pub inline_query_id: String,
pub results: Vec<InlineQueryResultArticle>,
pub cache_time: Option<i64>,
pub is_personal: Option<bool>,
pub next_offset: Option<String>,
}
impl AnswerInlineQuery {
pub fn new(inline_query_id: String) -> Self {
Self {
inline_query_id,
..Default::default()
}
}
pub fn with_article_text(self, title: impl Into<String>, text: impl Into<String>) -> Self {
Self {
inline_query_id: self.inline_query_id,
results: vec![InlineQueryResultArticle {
id: "0".to_string(),
result_type: "article".to_string(),
title: title.into(),
input_message_content: InputMessageContent {
message_text: text.into(),
},
}],
..Default::default()
}
}
}
#[derive(Debug, Serialize, Clone, Default)]
pub struct InlineQueryResultArticle {
pub id: String,
#[serde(rename = "type")]
pub result_type: String,
pub title: String,
pub input_message_content: InputMessageContent,
}
#[derive(Debug, Serialize, Clone, Default)]
pub struct InputMessageContent {
pub message_text: String,
}
impl Request for AnswerInlineQuery {}
impl API {
pub async fn answer_inline_query(&self, req: &AnswerInlineQuery) -> anyhow::Result<bool> {
self.client.post("answerInlineQuery", req).await
}
}