use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChannelReward {
pub id: String,
pub title: String,
pub description: String,
pub cost: u32,
#[serde(default = "default_true")]
pub is_enabled: bool,
#[serde(default)]
pub is_paused: bool,
#[serde(default)]
pub is_user_input_required: bool,
#[serde(default)]
pub should_redemptions_skip_request_queue: bool,
#[serde(default = "default_color")]
pub background_color: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateRewardRequest {
pub title: String,
pub cost: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_paused: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_user_input_required: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub should_redemptions_skip_request_queue: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<String>,
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct UpdateRewardRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cost: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_paused: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_user_input_required: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub should_redemptions_skip_request_queue: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChannelRewardRedemption {
pub id: String,
pub redeemed_at: String,
pub redeemer: RedemptionUser,
pub status: RedemptionStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_input: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RedemptionUser {
pub user_id: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum RedemptionStatus {
Pending,
Accepted,
Rejected,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailedRedemption {
pub id: String,
pub reason: FailureReason,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum FailureReason {
Unknown,
NotPending,
NotFound,
NotOwned,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManageRedemptionsRequest {
pub ids: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ManageRedemptionsResponse {
pub data: Vec<ChannelRewardRedemption>,
#[serde(default)]
pub failed: Vec<FailedRedemption>,
}
fn default_true() -> bool {
true
}
fn default_color() -> String {
"#00e701".to_string()
}