use asknothingx2_util::api::APIRequest;
use serde::{Deserialize, Serialize};
use url::Url;
crate::impl_endpoint!(
SendChatMessage {
broadcaster_id: String,
sender_id: String,
message: String,
};
new = {
params = {
broadcaster_id: impl Into<String>,
sender_id: impl Into<String>
},
init = {
broadcaster_id: broadcaster_id.into(),
sender_id: sender_id.into(),
message: "".to_string()
}
},
url = ["chat","messages"]
);
impl SendChatMessage {
pub fn set_message<T: Into<String>>(&mut self, message: T) {
self.message = message.into();
}
pub fn set_broadcaster_id<T: Into<String>>(&mut self, broadcaster_id: T) {
self.broadcaster_id = broadcaster_id.into();
}
pub fn set_sender_id<T: Into<String>>(&mut self, sender_id: T) {
self.sender_id = sender_id.into();
}
}
#[derive(Debug, Serialize)]
struct SendChatMessageRequest {
broadcaster_id: String,
sender_id: String,
message: String,
}
impl SendChatMessageRequest {
pub fn new(broadcaster_id: String, sender_id: String, message: String) -> Self {
Self {
broadcaster_id,
sender_id,
message,
}
}
}
impl APIRequest for SendChatMessage {
crate::impl_api_request_method!(POST);
crate::impl_api_request_header!(json);
fn json(&self) -> Option<String> {
Some(
serde_json::to_string(&SendChatMessageRequest::new(
self.broadcaster_id.clone(),
self.sender_id.clone(),
self.message.clone(),
))
.unwrap(),
)
}
fn url(&self) -> Url {
self.get_url()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DropReason {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageResponse {
pub message_id: String,
pub is_sent: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub drop_reason: Option<DropReason>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SendChatMessageResponse {
pub data: Vec<MessageResponse>,
}