use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
pub struct UserId(pub i64);
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
pub struct MessageId(pub i64);
impl From<i64> for UserId {
fn from(value: i64) -> Self {
Self(value)
}
}
impl From<i64> for MessageId {
fn from(value: i64) -> Self {
Self(value)
}
}
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ChatId {
Id(i64),
Username(String),
}
impl From<i64> for ChatId {
fn from(value: i64) -> Self {
Self::Id(value)
}
}
impl From<String> for ChatId {
fn from(value: String) -> Self {
Self::Username(value)
}
}
impl From<&str> for ChatId {
fn from(value: &str) -> Self {
Self::Username(value.to_owned())
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum ParseMode {
#[serde(rename = "Markdown")]
Markdown,
#[serde(rename = "MarkdownV2")]
MarkdownV2,
#[serde(rename = "HTML")]
Html,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct ResponseParameters {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub migrate_to_chat_id: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retry_after: Option<u64>,
}