twitch_types/
basic.rs

1manual_braid! {
2    /// A user ID.
3    pub struct UserId;
4    pub struct UserIdRef;
5}
6impl_extra!(numeric, UserId, UserIdRef);
7
8manual_braid! {
9    /// A users display name
10    pub struct DisplayName;
11    pub struct DisplayNameRef;
12}
13impl_extra!(DisplayName, DisplayNameRef);
14
15manual_braid! {
16    /// A nickname, not capitalized.
17    pub struct Nickname;
18    pub struct NicknameRef;
19}
20impl_extra!(ascii, Nickname, NicknameRef);
21
22/// A username, also specified as login. Should not be capitalized.
23pub type UserName = Nickname;
24
25/// A reference to a borrowed [`UserName`], also specified as login. Should not be capitalized.
26pub type UserNameRef = NicknameRef;
27
28manual_braid! {
29    /// A message ID
30    pub struct MsgId;
31    pub struct MsgIdRef;
32}
33impl_extra!(MsgId, MsgIdRef);
34
35/// Broadcaster types: "partner", "affiliate", or "".
36#[derive(Copy, Clone, Default, Debug, PartialEq, PartialOrd, Eq, Ord, Hash)]
37#[cfg_attr(feature = "serde", derive(serde_derive::Deserialize))]
38pub enum BroadcasterType {
39    /// Partner
40    #[cfg_attr(feature = "serde", serde(rename = "partner"))]
41    Partner,
42    /// Affiliate
43    #[cfg_attr(feature = "serde", serde(rename = "affiliate"))]
44    Affiliate,
45    /// None
46    #[cfg_attr(feature = "serde", serde(other))]
47    #[default]
48    None,
49}
50
51#[cfg(feature = "serde")]
52impl serde::Serialize for BroadcasterType {
53    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
54    where S: serde::Serializer {
55        serializer.serialize_str(match self {
56            BroadcasterType::Partner => "partner",
57            BroadcasterType::Affiliate => "affiliate",
58            BroadcasterType::None => "",
59        })
60    }
61}
62
63/// User types: "staff", "admin", "global_mod", or "".
64#[derive(Copy, Clone, Default, Debug, PartialEq, PartialOrd, Eq, Ord, Hash)]
65#[cfg_attr(feature = "serde", derive(serde_derive::Deserialize))]
66
67pub enum UserType {
68    /// Staff
69    #[cfg_attr(feature = "serde", serde(rename = "staff"))]
70    Staff,
71    /// Admin
72    #[cfg_attr(feature = "serde", serde(rename = "admin"))]
73    Admin,
74    /// Global Moderator
75    #[cfg_attr(feature = "serde", serde(rename = "global_mod"))]
76    GlobalMod,
77    /// None
78    #[cfg_attr(feature = "serde", serde(other))]
79    #[default]
80    None,
81}
82
83impl UserType {
84    /// Parse a string into a [`UserType`]
85    pub fn parse(input: &str) -> Self {
86        match input {
87            "admin" => Self::Admin,
88            "global_mod" => Self::GlobalMod,
89            "staff" => Self::Staff,
90            _ => Self::None,
91        }
92    }
93}
94
95#[cfg(feature = "serde")]
96impl serde::Serialize for UserType {
97    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
98    where S: serde::Serializer {
99        serializer.serialize_str(match self {
100            UserType::Staff => "staff",
101            UserType::Admin => "admin",
102            UserType::GlobalMod => "global_mod",
103            UserType::None => "",
104        })
105    }
106}