use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct LastUpdate {
#[serde(rename = "favorites")]
pub favorites: Option<String>,
#[serde(rename = "playlists")]
pub playlists: Option<String>,
#[serde(rename = "followings")]
pub followings: Option<String>,
#[serde(rename = "subscriptions")]
pub subscriptions: Option<String>,
#[serde(rename = "purchases")]
pub purchases: Option<String>,
#[serde(rename = "playback_history")]
pub playback_history: Option<String>,
#[serde(rename = "library")]
pub library: Option<String>,
#[serde(rename = "recommendations")]
pub recommendations: Option<String>,
#[serde(rename = "discover")]
pub discover: Option<String>,
#[serde(rename = "personal_radio")]
pub personal_radio: Option<String>,
#[serde(rename = "instant_mixes")]
pub instant_mixes: Option<String>,
#[serde(rename = "smart_playlists")]
pub smart_playlists: Option<String>,
#[serde(rename = "daily_mixes")]
pub daily_mixes: Option<String>,
#[serde(rename = "weekly_mixes")]
pub weekly_mixes: Option<String>,
#[serde(rename = "monthly_mixes")]
pub monthly_mixes: Option<String>,
#[serde(rename = "yearly_mixes")]
pub yearly_mixes: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct StoreFeatures {
#[serde(rename = "has_free_tier")]
pub has_free_tier: Option<bool>,
#[serde(rename = "has_trial")]
pub has_trial: Option<bool>,
#[serde(rename = "has_subscription")]
pub has_subscription: Option<bool>,
#[serde(rename = "has_hires")]
pub has_hires: Option<bool>,
#[serde(rename = "has_download")]
pub has_download: Option<bool>,
#[serde(rename = "has_streaming")]
pub has_streaming: Option<bool>,
#[serde(rename = "has_radio")]
pub has_radio: Option<bool>,
#[serde(rename = "has_playlist")]
pub has_playlist: Option<bool>,
#[serde(rename = "has_favorites")]
pub has_favorites: Option<bool>,
#[serde(rename = "has_library")]
pub has_library: Option<bool>,
#[serde(rename = "has_discover")]
pub has_discover: Option<bool>,
#[serde(rename = "has_recommendations")]
pub has_recommendations: Option<bool>,
#[serde(rename = "has_personal_radio")]
pub has_personal_radio: Option<bool>,
#[serde(rename = "has_instant_mixes")]
pub has_instant_mixes: Option<bool>,
#[serde(rename = "has_smart_playlists")]
pub has_smart_playlists: Option<bool>,
#[serde(rename = "has_daily_mixes")]
pub has_daily_mixes: Option<bool>,
#[serde(rename = "has_weekly_mixes")]
pub has_weekly_mixes: Option<bool>,
#[serde(rename = "has_monthly_mixes")]
pub has_monthly_mixes: Option<bool>,
#[serde(rename = "has_yearly_mixes")]
pub has_yearly_mixes: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct Subscription {
#[serde(rename = "id")]
pub id: Option<String>,
#[serde(rename = "user_id")]
pub user_id: Option<i64>,
#[serde(rename = "offer_id")]
pub offer_id: Option<String>,
#[serde(rename = "offer_name")]
pub offer_name: Option<String>,
#[serde(rename = "offer_country")]
pub offer_country: Option<String>,
#[serde(rename = "offer_currency")]
pub offer_currency: Option<String>,
#[serde(rename = "offer_price")]
pub offer_price: Option<f64>,
#[serde(rename = "offer_trial_days")]
pub offer_trial_days: Option<i32>,
#[serde(rename = "offer_type")]
pub offer_type: Option<String>,
#[serde(rename = "offer_family")]
pub offer_family: Option<String>,
#[serde(rename = "offer_features")]
pub offer_features: Option<Vec<String>>,
#[serde(rename = "status")]
pub status: Option<String>,
#[serde(rename = "status_code")]
pub status_code: Option<String>,
#[serde(rename = "start_date")]
pub start_date: Option<String>,
#[serde(rename = "end_date")]
pub end_date: Option<String>,
#[serde(rename = "renew_date")]
pub renew_date: Option<String>,
#[serde(rename = "cancel_date")]
pub cancel_date: Option<String>,
#[serde(rename = "cancel_reason")]
pub cancel_reason: Option<String>,
#[serde(rename = "is_active")]
pub is_active: Option<bool>,
#[serde(rename = "is_trial")]
pub is_trial: Option<bool>,
#[serde(rename = "is_canceled")]
pub is_canceled: Option<bool>,
#[serde(rename = "is_expired")]
pub is_expired: Option<bool>,
#[serde(rename = "is_renewable")]
pub is_renewable: Option<bool>,
#[serde(rename = "is_auto_renew")]
pub is_auto_renew: Option<bool>,
#[serde(rename = "next_payment_date")]
pub next_payment_date: Option<String>,
#[serde(rename = "last_payment_date")]
pub last_payment_date: Option<String>,
#[serde(rename = "next_payment_amount")]
pub next_payment_amount: Option<f64>,
#[serde(rename = "payment_method")]
pub payment_method: Option<String>,
#[serde(rename = "payment_status")]
pub payment_status: Option<String>,
#[serde(rename = "payment_failed_count")]
pub payment_failed_count: Option<i32>,
#[serde(rename = "payment_failed_reason")]
pub payment_failed_reason: Option<String>,
#[serde(rename = "payment_failed_date")]
pub payment_failed_date: Option<String>,
#[serde(rename = "payment_retry_date")]
pub payment_retry_date: Option<String>,
#[serde(rename = "payment_retry_count")]
pub payment_retry_count: Option<i32>,
#[serde(rename = "payment_retry_max")]
pub payment_retry_max: Option<i32>,
#[serde(rename = "payment_retry_interval")]
pub payment_retry_interval: Option<i32>,
#[serde(rename = "payment_retry_multiplier")]
pub payment_retry_multiplier: Option<f64>,
#[serde(rename = "payment_retry_backoff")]
pub payment_retry_backoff: Option<String>,
#[serde(rename = "payment_retry_strategy")]
pub payment_retry_strategy: Option<String>,
#[serde(rename = "payment_retry_enabled")]
pub payment_retry_enabled: Option<bool>,
#[serde(rename = "payment_retry_active")]
pub payment_retry_active: Option<bool>,
#[serde(rename = "payment_retry_scheduled")]
pub payment_retry_scheduled: Option<bool>,
#[serde(rename = "payment_retry_scheduled_date")]
pub payment_retry_scheduled_date: Option<String>,
#[serde(rename = "payment_retry_scheduled_count")]
pub payment_retry_scheduled_count: Option<i32>,
#[serde(rename = "payment_retry_scheduled_reason")]
pub payment_retry_scheduled_reason: Option<String>,
}