use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum TransactionPartner {
User(crate::types::TransactionPartnerUser),
Chat(crate::types::TransactionPartnerChat),
AffiliateProgram(crate::types::TransactionPartnerAffiliateProgram),
Fragment(crate::types::TransactionPartnerFragment),
TelegramAds(crate::types::TransactionPartnerTelegramAds),
TelegramApi(crate::types::TransactionPartnerTelegramApi),
Other(crate::types::TransactionPartnerOther),
}
impl TransactionPartner {
#[must_use]
pub fn affiliate(&self) -> Option<&crate::types::AffiliateInfo> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::affiliate(val),
_ => None,
}
}
#[must_use]
pub fn chat(&self) -> Option<&crate::types::Chat> {
match self {
Self::Chat(val) => Some(val.chat.as_ref()),
_ => None,
}
}
#[must_use]
pub fn commission_per_mille(&self) -> Option<i64> {
match self {
Self::AffiliateProgram(val) => Some(val.commission_per_mille),
_ => None,
}
}
#[must_use]
pub fn gift(&self) -> Option<&crate::types::Gift> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val),
Self::Chat(val) => val.gift.as_deref(),
_ => None,
}
}
#[must_use]
pub fn invoice_payload(&self) -> Option<&str> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::invoice_payload(val),
_ => None,
}
}
#[must_use]
pub fn paid_media(&self) -> Option<&[crate::types::PaidMedia]> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::paid_media(val),
_ => None,
}
}
#[must_use]
pub fn paid_media_payload(&self) -> Option<&str> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::paid_media_payload(val),
_ => None,
}
}
#[must_use]
pub fn premium_subscription_duration(&self) -> Option<i64> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::premium_subscription_duration(val)
}
_ => None,
}
}
#[must_use]
pub fn request_count(&self) -> Option<i64> {
match self {
Self::TelegramApi(val) => Some(val.request_count),
_ => None,
}
}
#[must_use]
pub fn sponsor_user(&self) -> Option<&crate::types::User> {
match self {
Self::AffiliateProgram(val) => val.sponsor_user.as_deref(),
_ => None,
}
}
#[must_use]
pub fn subscription_period(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::subscription_period(val),
_ => None,
}
}
#[must_use]
pub fn user(&self) -> Option<&crate::types::User> {
match self {
Self::User(val) => Some(crate::types::TransactionPartnerUser::user(val)),
_ => None,
}
}
#[must_use]
pub fn withdrawal_state(&self) -> Option<&crate::types::RevenueWithdrawalState> {
match self {
Self::Fragment(val) => val.withdrawal_state.as_ref(),
_ => None,
}
}
#[must_use]
pub fn added_to_attachment_menu(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.added_to_attachment_menu),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.added_to_attachment_menu
}
_ => None,
}
}
#[must_use]
pub fn affiliate_chat(&self) -> Option<&crate::types::Chat> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::affiliate(val)
.and_then(|inner| inner.affiliate_chat.as_deref()),
_ => None,
}
}
#[must_use]
pub fn affiliate_user(&self) -> Option<&crate::types::User> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::affiliate(val)
.and_then(|inner| inner.affiliate_user.as_deref()),
_ => None,
}
}
#[must_use]
pub fn allows_users_to_create_topics(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.allows_users_to_create_topics),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.allows_users_to_create_topics
}
_ => None,
}
}
#[must_use]
pub fn amount(&self) -> Option<i64> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::affiliate(val).map(|inner| inner.amount)
}
_ => None,
}
}
#[must_use]
pub fn background(&self) -> Option<&crate::types::GiftBackground> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.background.as_ref()),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.background.as_ref()),
_ => None,
}
}
#[must_use]
pub fn can_connect_to_business(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.can_connect_to_business),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.can_connect_to_business
}
_ => None,
}
}
#[must_use]
pub fn can_join_groups(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.can_join_groups),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.can_join_groups
}
_ => None,
}
}
#[must_use]
pub fn can_manage_bots(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.can_manage_bots),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.can_manage_bots
}
_ => None,
}
}
#[must_use]
pub fn can_read_all_group_messages(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.can_read_all_group_messages),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.can_read_all_group_messages
}
_ => None,
}
}
#[must_use]
pub fn date(&self) -> Option<i64> {
match self {
Self::Fragment(val) => val
.withdrawal_state
.as_ref()
.and_then(crate::types::RevenueWithdrawalState::date),
_ => None,
}
}
#[must_use]
pub fn first_name(&self) -> Option<&str> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::first_name(inner)
}
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.map(|inner| inner.first_name.as_ref()),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
Some(inner.first_name.as_ref())
}
_ => None,
}
}
#[must_use]
pub fn has_colors(&self) -> Option<bool> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::gift(val).and_then(|inner| inner.has_colors)
}
Self::Chat(val) => val.gift.as_deref().and_then(|inner| inner.has_colors),
_ => None,
}
}
#[must_use]
pub fn has_main_web_app(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.has_main_web_app),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.has_main_web_app
}
_ => None,
}
}
#[must_use]
pub fn has_topics_enabled(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.has_topics_enabled),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.has_topics_enabled
}
_ => None,
}
}
#[must_use]
pub fn is_bot(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val.sponsor_user.as_deref().map(|inner| inner.is_bot),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
Some(inner.is_bot)
}
_ => None,
}
}
#[must_use]
pub fn is_direct_messages(&self) -> Option<bool> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::is_direct_messages(inner)
}
_ => None,
}
}
#[must_use]
pub fn is_forum(&self) -> Option<bool> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::is_forum(inner)
}
_ => None,
}
}
#[must_use]
pub fn language_code(&self) -> Option<&str> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.language_code.as_deref()),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.language_code.as_deref()
}
_ => None,
}
}
#[must_use]
pub fn last_name(&self) -> Option<&str> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::last_name(inner)
}
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.last_name.as_deref()),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.last_name.as_deref()
}
_ => None,
}
}
#[must_use]
pub fn nanostar_amount(&self) -> Option<i32> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::affiliate(val)
.and_then(|inner| inner.nanostar_amount),
_ => None,
}
}
#[must_use]
pub fn personal_remaining_count(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.personal_remaining_count),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.personal_remaining_count),
_ => None,
}
}
#[must_use]
pub fn personal_total_count(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.personal_total_count),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.personal_total_count),
_ => None,
}
}
#[must_use]
pub fn publisher_chat(&self) -> Option<&crate::types::Chat> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.publisher_chat.as_deref()),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.publisher_chat.as_deref()),
_ => None,
}
}
#[must_use]
pub fn remaining_count(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.remaining_count),
Self::Chat(val) => val.gift.as_deref().and_then(|inner| inner.remaining_count),
_ => None,
}
}
#[must_use]
pub fn star_count(&self) -> Option<i64> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::gift(val).map(|inner| inner.star_count)
}
Self::Chat(val) => val.gift.as_deref().map(|inner| inner.star_count),
_ => None,
}
}
#[must_use]
pub fn sticker(&self) -> Option<&crate::types::Sticker> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::gift(val).map(|inner| inner.sticker.as_ref())
}
Self::Chat(val) => val.gift.as_deref().map(|inner| inner.sticker.as_ref()),
_ => None,
}
}
#[must_use]
pub fn supports_inline_queries(&self) -> Option<bool> {
match self {
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.supports_inline_queries),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.supports_inline_queries
}
_ => None,
}
}
#[must_use]
pub fn title(&self) -> Option<&str> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::title(inner)
}
_ => None,
}
}
#[must_use]
pub fn total_count(&self) -> Option<i64> {
match self {
Self::User(val) => {
crate::types::TransactionPartnerUser::gift(val).and_then(|inner| inner.total_count)
}
Self::Chat(val) => val.gift.as_deref().and_then(|inner| inner.total_count),
_ => None,
}
}
#[must_use]
pub fn unique_gift_variant_count(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.unique_gift_variant_count),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.unique_gift_variant_count),
_ => None,
}
}
#[must_use]
pub fn upgrade_star_count(&self) -> Option<i64> {
match self {
Self::User(val) => crate::types::TransactionPartnerUser::gift(val)
.and_then(|inner| inner.upgrade_star_count),
Self::Chat(val) => val
.gift
.as_deref()
.and_then(|inner| inner.upgrade_star_count),
_ => None,
}
}
#[must_use]
pub fn url(&self) -> Option<&str> {
match self {
Self::Fragment(val) => val
.withdrawal_state
.as_ref()
.and_then(crate::types::RevenueWithdrawalState::url),
_ => None,
}
}
#[must_use]
pub fn username(&self) -> Option<&str> {
match self {
Self::Chat(val) => {
let inner = val.chat.as_ref();
crate::types::Chat::username(inner)
}
Self::AffiliateProgram(val) => val
.sponsor_user
.as_deref()
.and_then(|inner| inner.username.as_deref()),
Self::User(val) => {
let inner = crate::types::TransactionPartnerUser::user(val);
inner.username.as_deref()
}
_ => None,
}
}
}
impl From<crate::types::TransactionPartnerUser> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerUser) -> Self {
Self::User(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerUser {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::User(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerUser),
))
}
}
}
impl From<crate::types::TransactionPartnerChat> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerChat) -> Self {
Self::Chat(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerChat {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::Chat(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerChat),
))
}
}
}
impl From<crate::types::TransactionPartnerAffiliateProgram> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerAffiliateProgram) -> Self {
Self::AffiliateProgram(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerAffiliateProgram {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::AffiliateProgram(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerAffiliateProgram),
))
}
}
}
impl From<crate::types::TransactionPartnerFragment> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerFragment) -> Self {
Self::Fragment(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerFragment {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::Fragment(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerFragment),
))
}
}
}
impl From<crate::types::TransactionPartnerTelegramAds> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerTelegramAds) -> Self {
Self::TelegramAds(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerTelegramAds {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::TelegramAds(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerTelegramAds),
))
}
}
}
impl From<crate::types::TransactionPartnerTelegramApi> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerTelegramApi) -> Self {
Self::TelegramApi(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerTelegramApi {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::TelegramApi(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerTelegramApi),
))
}
}
}
impl From<crate::types::TransactionPartnerOther> for TransactionPartner {
fn from(val: crate::types::TransactionPartnerOther) -> Self {
Self::Other(val)
}
}
impl TryFrom<TransactionPartner> for crate::types::TransactionPartnerOther {
type Error = crate::errors::ConvertToTypeError;
fn try_from(val: TransactionPartner) -> Result<Self, Self::Error> {
if let TransactionPartner::Other(inner) = val {
Ok(inner)
} else {
Err(Self::Error::new(
stringify!(TransactionPartner),
stringify!(TransactionPartnerOther),
))
}
}
}