use serde::{Deserialize, Serialize};
use crate::chat::Chat;
use crate::sticker::Sticker;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GiftBackground {
pub center_color: u32,
pub edge_color: u32,
pub text_color: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Gift {
pub id: String,
pub sticker: Sticker,
pub star_count: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub upgrade_star_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_premium: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_colors: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remaining_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub personal_total_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub personal_remaining_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub background: Option<GiftBackground>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unique_gift_variant_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publisher_chat: Option<Chat>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Gifts {
pub gifts: Vec<Gift>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGiftModel {
pub name: String,
pub sticker: Sticker,
pub rarity_per_mille: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub rarity: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGiftSymbol {
pub name: String,
pub sticker: Sticker,
pub rarity_per_mille: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGiftBackdropColors {
pub center_color: u32,
pub edge_color: u32,
pub symbol_color: u32,
pub text_color: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGiftBackdrop {
pub name: String,
pub colors: UniqueGiftBackdropColors,
pub rarity_per_mille: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGiftColors {
pub model_custom_emoji_id: String,
pub symbol_custom_emoji_id: String,
pub light_theme_main_color: u32,
pub light_theme_other_colors: Vec<u32>,
pub dark_theme_main_color: u32,
pub dark_theme_other_colors: Vec<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UniqueGift {
pub gift_id: String,
pub base_name: String,
pub name: String,
pub number: u32,
pub model: UniqueGiftModel,
pub symbol: UniqueGiftSymbol,
pub backdrop: UniqueGiftBackdrop,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_premium: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_burned: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_from_blockchain: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub colors: Option<UniqueGiftColors>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publisher_chat: Option<Chat>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct GiftInfo {
pub gift: Gift,
#[serde(skip_serializing_if = "Option::is_none")]
pub owned_gift_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub convert_star_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prepaid_upgrade_star_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_upgrade_separate: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_be_upgraded: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<Vec<crate::message::MessageEntity>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_private: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unique_gift_number: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct UniqueGiftInfo {
pub gift: UniqueGift,
pub origin: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_resale_currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_resale_amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owned_gift_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transfer_star_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_transfer_date: Option<i64>,
}