1use crate::{DisplayName, UserId, UserName};
2manual_braid! {
3 pub struct RewardId;
5 pub struct RewardIdRef;
6}
7
8impl_extra!(RewardId, RewardIdRef);
9manual_braid! {
10 pub struct RedemptionId;
12 pub struct RedemptionIdRef;
13}
14impl_extra!(RedemptionId, RedemptionIdRef);
15
16manual_braid! {
17 pub struct PollId;
19 pub struct PollIdRef;
20}
21impl_extra!(PollId, PollIdRef);
22
23manual_braid! {
24 pub struct PollChoiceId;
26 pub struct PollChoiceIdRef;
27}
28impl_extra!(PollChoiceId, PollChoiceIdRef);
29
30manual_braid! {
31 pub struct PredictionId;
33 pub struct PredictionIdRef;
34}
35impl_extra!(PredictionId, PredictionIdRef);
36
37manual_braid! {
38 pub struct PredictionOutcomeId;
40 pub struct PredictionOutcomeIdRef;
41}
42impl_extra!(PredictionOutcomeId, PredictionOutcomeIdRef);
43
44#[derive(Clone, Debug, PartialEq, Eq)]
46#[cfg_attr(
47 feature = "serde",
48 derive(serde_derive::Serialize, serde_derive::Deserialize)
49)]
50#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
51#[cfg_attr(feature = "serde", serde(untagged))]
52#[non_exhaustive]
53pub enum Max {
54 MaxPerStream {
56 is_enabled: bool,
58 #[cfg_attr(feature = "serde", serde(alias = "value"))]
60 max_per_stream: u32,
61 },
62 MaxPerUserPerStream {
64 is_enabled: bool,
66 #[cfg_attr(feature = "serde", serde(alias = "value"))]
68 max_per_user_per_stream: u32,
69 },
70}
71
72#[derive(Clone, Debug, PartialEq, Eq)]
74#[cfg_attr(
75 feature = "serde",
76 derive(serde_derive::Serialize, serde_derive::Deserialize)
77)]
78#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
79#[non_exhaustive]
80pub struct GlobalCooldown {
81 pub is_enabled: bool,
83 #[cfg_attr(feature = "serde", serde(alias = "seconds"))]
85 pub global_cooldown_seconds: u32,
86}
87
88#[derive(Clone, Debug, PartialEq, Eq)]
90#[cfg_attr(
91 feature = "serde",
92 derive(serde_derive::Serialize, serde_derive::Deserialize)
93)]
94#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
95#[non_exhaustive]
96pub struct PollChoice {
97 pub id: String,
99 pub title: String,
101 pub votes: Option<i64>,
103 pub channel_points_votes: Option<i64>,
105 pub bits_votes: Option<i64>,
107}
108
109#[derive(PartialEq, Eq, Debug, Clone)]
112#[cfg_attr(
113 feature = "serde",
114 derive(serde_derive::Serialize, serde_derive::Deserialize)
115)]
116#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
117#[cfg_attr(feature = "serde", serde(rename_all = "UPPERCASE"))]
118#[non_exhaustive]
119pub enum PollStatus {
120 #[cfg_attr(feature = "serde", serde(alias = "active"))]
122 Active,
123 #[cfg_attr(feature = "serde", serde(alias = "completed"))]
125 Completed,
126 #[cfg_attr(feature = "serde", serde(alias = "terminated"))]
128 Terminated,
129 #[cfg_attr(feature = "serde", serde(alias = "archived"))]
131 Archived,
132 #[cfg_attr(feature = "serde", serde(alias = "moderated"))]
134 Moderated,
135 #[cfg_attr(feature = "serde", serde(alias = "invalid"))]
137 Invalid,
138}
139
140#[derive(PartialEq, Eq, Debug, Clone)]
143#[cfg_attr(
144 feature = "serde",
145 derive(serde_derive::Serialize, serde_derive::Deserialize)
146)]
147#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
148#[cfg_attr(feature = "serde", serde(rename_all = "UPPERCASE"))]
149#[non_exhaustive]
150pub enum PredictionStatus {
151 #[cfg_attr(feature = "serde", serde(alias = "resolved"))]
153 Resolved,
154 #[cfg_attr(feature = "serde", serde(alias = "active"))]
156 Active,
157 #[cfg_attr(feature = "serde", serde(alias = "canceled"))]
159 Canceled,
160 #[cfg_attr(feature = "serde", serde(alias = "locked"))]
162 Locked,
163}
164
165#[derive(PartialEq, Eq, Debug, Clone)]
167#[cfg_attr(
168 feature = "serde",
169 derive(serde_derive::Serialize, serde_derive::Deserialize)
170)]
171#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
172#[non_exhaustive]
173pub struct PredictionOutcome {
174 pub id: String,
176 pub title: String,
178 pub users: Option<i64>,
180 pub channel_points: Option<i64>,
182 pub top_predictors: Option<Vec<PredictionTopPredictors>>,
184 pub color: String,
186}
187
188#[derive(PartialEq, Eq, Debug, Clone)]
191#[cfg_attr(
192 feature = "serde",
193 derive(serde_derive::Serialize, serde_derive::Deserialize)
194)]
195#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
196#[non_exhaustive]
197pub struct PredictionTopPredictors {
198 #[cfg_attr(feature = "serde", serde(alias = "user_id"))]
200 pub id: UserId,
201 #[cfg_attr(feature = "serde", serde(alias = "user_name"))]
203 pub name: DisplayName,
204 #[cfg_attr(feature = "serde", serde(alias = "user_login"))]
206 pub login: UserName,
207 pub channel_points_used: i64,
209 pub channel_points_won: Option<i64>,
213}