use std::collections::HashMap;
use super::super::{
response::TwitchResult,
TwitchClient,
};
use serde::Deserialize;
pub fn get_badges(
c: &TwitchClient,
chan_id: &str,
) -> TwitchResult<BadgeSet>
{
let r = c.get::<BadgeSet>(&format!("/chat/{}/badges", chan_id))?;
Ok(r)
}
pub fn get_emote_sets(
c: &TwitchClient,
sets: &[&str],
) -> TwitchResult<EmotesBySet>
{
let r = c.get::<EmotesBySet>(&format!(
"/chat/emoticon_images?emotesets={}",
sets.join(",")
))?;
Ok(r)
}
pub fn get_emotes(c: &TwitchClient) -> TwitchResult<ChatEmotes> {
let r = c.get::<ChatEmotes>("/chat/emoticons")?;
Ok(r)
}
pub type BadgeSet = HashMap<String, Option<Badge>>;
#[derive(Deserialize, Debug)]
pub struct Badge {
pub alpha: String,
pub image: String,
pub svg: String,
}
#[derive(Deserialize, Debug)]
pub struct EmotesBySet {
pub emoticon_sets: HashMap<String, Vec<EmoteSet>>,
}
#[derive(Deserialize, Debug)]
pub struct EmoteSet {
pub id: i64,
pub code: String,
}
#[derive(Deserialize, Debug)]
pub struct ChatEmotes {
pub emoticons: Vec<ChatEmote>,
}
#[derive(Deserialize, Debug)]
pub struct ChatEmote {
pub regex: String,
pub images: Vec<ChatEmoteImage>,
}
#[derive(Deserialize, Debug)]
pub struct ChatEmoteImage {
pub width: i32,
pub height: i32,
pub url: String,
pub emoticon_set: Option<i64>,
}
#[cfg(test)]
mod tests {
use crate::{
new,
tests::CLIENTID,
};
#[test]
fn get_badges() {
let c = new(String::from(CLIENTID));
match super::get_badges(&c, "12826") {
Ok(r) => assert!(r.contains_key("global_mod")),
Err(r) => {
println!("{:?}", r);
assert!(false);
}
}
}
#[test]
#[cfg_attr(not(feature = "expensive_tests"), ignore)]
fn get_emote_sets() {
let c = new(String::from(CLIENTID));
match super::get_emote_sets(&c, &["19151"]) {
Ok(r) => assert!(r.emoticon_sets.contains_key("19151")),
Err(r) => {
println!("{:?}", r);
assert!(false);
}
}
}
#[test]
#[cfg_attr(not(feature = "expensive_tests"), ignore)]
fn get_emotes() {
let c = new(String::from(CLIENTID));
match super::get_emotes(&c) {
Ok(r) => assert!(r.emoticons.len() > 0),
Err(r) => {
println!("{:?}", r);
assert!(false);
}
}
}
}