use bitflags::bitflags;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIEntitlement {
pub id: String,
pub sku_id: String,
pub user_id: Option<String>,
pub guild_id: Option<String>,
pub application_id: String,
pub r#type: EntitlementType,
pub deleted: bool,
pub starts_at: Option<String>,
pub ends_at: Option<String>,
pub consumed: Option<bool>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum EntitlementType {
Purchase = 1,
PremiumSubscription = 2,
DeveloperGift = 3,
TestModePurchase = 4,
FreePurchase = 5,
UserGift = 6,
PremiumPurchase = 7,
ApplicationSubscription = 8,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APISKU {
pub id: String,
pub r#type: SKUType,
pub application_id: String,
pub name: String,
pub slug: String,
pub flags: SKUFlags,
}
bitflags! {
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(transparent)]
pub struct SKUFlags: u32 {
const Available = 1 << 2;
const GuildSubscription = 1 << 7;
const UserSubscription = 1 << 8;
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum SKUType {
Durable = 2,
Consumable = 3,
Subscription = 5,
SubscriptionGroup = 6,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APISubscription {
pub id: String,
pub user_id: String,
pub sku_ids: Vec<String>,
pub entitlement_ids: Vec<String>,
pub renewal_sku_ids: Option<Vec<String>>,
pub current_period_start: String,
pub current_period_end: String,
pub status: SubscriptionStatus,
pub canceled_at: Option<String>,
pub country: Option<String>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum SubscriptionStatus {
Active = 0,
Ending = 1,
Inactive = 2,
}