kick_api/models/
reward.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct ChannelReward {
6 pub id: String,
8
9 pub title: String,
11
12 pub description: String,
14
15 pub cost: u32,
17
18 #[serde(default = "default_true")]
20 pub is_enabled: bool,
21
22 #[serde(default)]
24 pub is_paused: bool,
25
26 #[serde(default)]
28 pub is_user_input_required: bool,
29
30 #[serde(default)]
32 pub should_redemptions_skip_request_queue: bool,
33
34 #[serde(default = "default_color")]
36 pub background_color: String,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct CreateRewardRequest {
42 pub title: String,
43 pub cost: u32,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub description: Option<String>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub is_enabled: Option<bool>,
50
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub is_paused: Option<bool>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub is_user_input_required: Option<bool>,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub should_redemptions_skip_request_queue: Option<bool>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub background_color: Option<String>,
62}
63
64#[derive(Debug, Clone, Serialize, Default)]
66pub struct UpdateRewardRequest {
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub title: Option<String>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub description: Option<String>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub cost: Option<u32>,
75
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub is_enabled: Option<bool>,
78
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub is_paused: Option<bool>,
81
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub is_user_input_required: Option<bool>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub should_redemptions_skip_request_queue: Option<bool>,
87
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub background_color: Option<String>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct ChannelRewardRedemption {
95 pub id: String,
97
98 pub redeemed_at: String,
100
101 pub redeemer: RedemptionUser,
103
104 pub status: RedemptionStatus,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub user_input: Option<String>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct RedemptionUser {
115 pub user_id: u64,
116}
117
118#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
120#[serde(rename_all = "lowercase")]
121pub enum RedemptionStatus {
122 Pending,
123 Accepted,
124 Rejected,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct FailedRedemption {
130 pub id: String,
132
133 pub reason: FailureReason,
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
139#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
140pub enum FailureReason {
141 Unknown,
142 NotPending,
143 NotFound,
144 NotOwned,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize)]
149pub struct ManageRedemptionsRequest {
150 pub ids: Vec<String>,
152}
153
154#[derive(Debug, Clone, Deserialize)]
156pub struct ManageRedemptionsResponse {
157 pub data: Vec<ChannelRewardRedemption>,
159
160 #[serde(default)]
162 pub failed: Vec<FailedRedemption>,
163}
164
165fn default_true() -> bool {
167 true
168}
169
170fn default_color() -> String {
171 "#00e701".to_string()
172}