use asknothingx2_util::api::APIRequest;
use serde::{Deserialize, Serialize};
use url::Url;
crate::impl_endpoint!(
GetChatSetting {
broadcaster_id: String,
moderator_id: Option<String>,
};
new = {
params = {
broadcaster_id: impl Into<String>,
},
init = {
broadcaster_id: broadcaster_id.into(),
moderator_id: None,
}
},
url = ["chat","settings"]
);
impl GetChatSetting {
pub fn set_moderator_id<T: Into<String>>(&mut self, moderator_id: T) {
self.moderator_id = Some(moderator_id.into());
}
}
impl APIRequest for GetChatSetting {
crate::impl_api_request_method!(GET);
crate::impl_api_request_header!();
fn url(&self) -> Url {
let mut url = self.get_url();
url.query_pairs_mut()
.append_pair("broadcaster_id", &self.broadcaster_id);
if let Some(moderator_id) = &self.moderator_id {
url.query_pairs_mut()
.append_pair("moderator_id", moderator_id);
}
url
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatSetting {
pub broadcaster_id: String,
pub emote_mode: bool,
pub follower_mode: bool,
pub follower_mode_duration: Option<u64>,
pub moderator_id: Option<String>,
pub non_moderator_chat_delay: bool,
pub non_moderator_chat_delay_duration: Option<u64>,
pub slow_mode: bool,
pub show_mode_wait_time: Option<u64>,
pub subscriber_mode: bool,
pub unique_chat_mode: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatSettingResponse {
pub data: Vec<ChatSetting>,
}
#[cfg(test)]
mod tests {
use crate::{
api_general, expect_APIRequest, expect_headers, expect_response_json,
get_chat_setting::ChatSettingResponse,
};
use super::GetChatSetting;
#[test]
fn get_chat_setting() {
let chat_setting = api_general!(GetChatSetting, "1234");
let expected_headers = expect_headers!();
expect_APIRequest!(
GET,
expected_headers,
"https://api.twitch.tv/helix/chat/settings?broadcaster_id=1234",
json = None,
text = None,
urlencoded = None,
chat_setting
);
}
#[test]
fn get_chat_settings_response() {
expect_response_json!("{\n \"data\": [\n {\n \"broadcaster_id\": \"713936733\",\n \"slow_mode\": false,\n \"slow_mode_wait_time\": null,\n \"follower_mode\": true,\n \"follower_mode_duration\": 0,\n \"subscriber_mode\": false,\n \"emote_mode\": false,\n \"unique_chat_mode\": false,\n \"non_moderator_chat_delay\": true,\n \"non_moderator_chat_delay_duration\": 4\n }\n ]\n}",
ChatSettingResponse);
}
}