use serde::Serialize;
use crate::types::BroadcasterId;
define_request!(
#[derive(Serialize)]
SendChatMessageRequest<'a> {
req: {
broadcaster_id: &'a BroadcasterId,
sender_id: &'a str,
message: &'a str
},
opts: {
#[serde(skip_serializing_if = "Option::is_none")]
for_source_only: bool,
#[serde(skip_serializing_if = "Option::is_none")]
reply_parent_message_id: &'a str | into
};
into_json
}
);
define_request!(
#[derive(Default, Serialize)]
UpdateChatSettingsRequest {
opts: {
#[serde(skip_serializing_if = "Option::is_none")]
emote_mode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
follower_mode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
follower_mode_duration: u64,
#[serde(skip_serializing_if = "Option::is_none")]
non_moderator_chat_delay: bool,
#[serde(skip_serializing_if = "Option::is_none")]
non_moderator_chat_delay_duration: u64,
#[serde(skip_serializing_if = "Option::is_none")]
slow_mode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
slow_mode_wait_time: u64,
#[serde(skip_serializing_if = "Option::is_none")]
subscriber_mode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
unique_chat_mode: bool,
};
into_json
}
);
#[derive(Debug, Serialize)]
pub enum ChatColor {
Blue,
BlueViolet,
CadetBlue,
Chocolate,
Coral,
DodgerBlue,
Firebrick,
GoldenRod,
Green,
HotPink,
OrangeRed,
Red,
SeaGreen,
SpringGreen,
YellowGreen,
}
impl ChatColor {
pub fn as_str(&self) -> &str {
match self {
Self::Blue => "blue",
Self::BlueViolet => "blue_violet",
Self::CadetBlue => "cadet_blue",
Self::Chocolate => "chocolate",
Self::Coral => "coral",
Self::DodgerBlue => "dodger_blue",
Self::Firebrick => "firebrick",
Self::GoldenRod => "golden_rod",
Self::Green => "green",
Self::HotPink => "hot_pink",
Self::OrangeRed => "orange_red",
Self::Red => "red",
Self::SeaGreen => "sea_green",
Self::SpringGreen => "spring_green",
Self::YellowGreen => "yellow_green",
}
}
}
define_request!(
#[derive(Serialize)]
ChatAnnouncementBody<'a> {
req: {
message: &'a str,
color: Option<AnnouncementColor>
};
into_json
}
);
#[derive(Debug, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum AnnouncementColor {
Blue,
Green,
Orange,
Purple,
Primary,
}
impl AnnouncementColor {
pub fn as_str(&self) -> &str {
match self {
Self::Blue => "blue",
Self::Green => "green",
Self::Orange => "orange",
Self::Purple => "purple",
Self::Primary => "primary",
}
}
}
#[cfg(test)]
mod tests {
use crate::chat::request::{AnnouncementColor, ChatColor};
#[test]
fn chat_color_enum() {
let colors = vec![
(ChatColor::Blue, "blue"),
(ChatColor::BlueViolet, "blue_violet"),
(ChatColor::CadetBlue, "cadet_blue"),
(ChatColor::Chocolate, "chocolate"),
(ChatColor::Coral, "coral"),
(ChatColor::DodgerBlue, "dodger_blue"),
(ChatColor::Firebrick, "firebrick"),
(ChatColor::GoldenRod, "golden_rod"),
(ChatColor::Green, "green"),
(ChatColor::HotPink, "hot_pink"),
(ChatColor::OrangeRed, "orange_red"),
(ChatColor::Red, "red"),
(ChatColor::SeaGreen, "sea_green"),
(ChatColor::SpringGreen, "spring_green"),
(ChatColor::YellowGreen, "yellow_green"),
];
for (color, expected_str) in colors {
assert_eq!(color.as_str(), expected_str);
}
}
#[test]
fn announcement_color_enum() {
let colors = vec![
(AnnouncementColor::Blue, "blue"),
(AnnouncementColor::Green, "green"),
(AnnouncementColor::Orange, "orange"),
(AnnouncementColor::Purple, "purple"),
(AnnouncementColor::Primary, "primary"),
];
for (color, expected_str) in colors {
assert_eq!(color.as_str(), expected_str);
}
let color = AnnouncementColor::Purple;
let serialized = serde_json::to_string(&color).unwrap();
assert_eq!(serialized, "\"purple\"");
}
}