use crate::user::User;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Poll {
pub id: String,
pub question: String,
pub question_entities: Option<Vec<crate::message::MessageEntity>>,
pub options: Vec<PollOption>,
pub total_voter_count: u32,
pub is_closed: bool,
pub is_anonymous: bool,
#[serde(rename = "type")]
pub kind: PollType,
pub allows_multiple_answers: bool,
pub allows_revoting: Option<bool>,
pub correct_option_id: Option<u8>,
pub explanation: Option<String>,
pub explanation_entities: Option<Vec<crate::message::MessageEntity>>,
pub open_period: Option<u32>,
pub close_date: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PollOption {
pub text: String,
pub text_entities: Option<Vec<crate::message::MessageEntity>>,
pub voter_count: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputPollOption {
pub text: String,
pub text_parse_mode: Option<crate::message::ParseMode>,
pub text_entities: Option<Vec<crate::message::MessageEntity>>,
}
impl InputPollOption {
pub fn new(text: impl Into<String>) -> Self {
Self {
text: text.into(),
text_parse_mode: None,
text_entities: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PollType {
Regular,
Quiz,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PollAnswer {
pub poll_id: String,
pub voter_chat: Option<crate::chat::Chat>,
pub user: Option<User>,
pub option_ids: Vec<u8>,
}