use super::{PostInfo, ReplyInfo, ThreadInfo};
use crate::api::BotApi;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct ForumAuditResult {
#[serde(default)]
pub task_id: String,
#[serde(default)]
pub guild_id: String,
#[serde(default)]
pub channel_id: String,
#[serde(default)]
pub author_id: String,
#[serde(default)]
pub thread_id: String,
#[serde(default)]
pub post_id: String,
#[serde(default)]
pub reply_id: String,
#[serde(default, rename = "type")]
pub publish_type: u32,
#[serde(default)]
pub result: u32,
#[serde(default)]
pub err_msg: String,
#[serde(default)]
pub date_time: String,
#[serde(skip)]
pub event_id: Option<String>,
}
impl ForumAuditResult {
pub fn new(event_id: Option<String>, data: &Value) -> Self {
let mut result = serde_json::from_value::<Self>(data.clone()).unwrap_or_default();
result.event_id = event_id;
result
}
}
#[derive(Debug, Clone, Serialize)]
pub struct OpenThread {
#[serde(skip)]
api: BotApi,
pub channel_id: Option<String>,
pub guild_id: Option<String>,
pub author_id: Option<String>,
pub thread_info: Option<ThreadInfo>,
pub post_info: Option<PostInfo>,
pub reply_info: Option<ReplyInfo>,
pub event_id: Option<String>,
}
#[derive(Debug, Default, Deserialize)]
struct OpenThreadWire {
#[serde(default)]
guild_id: Option<String>,
#[serde(default)]
channel_id: Option<String>,
#[serde(default)]
author_id: Option<String>,
#[serde(default)]
thread_info: Option<ThreadInfo>,
#[serde(default)]
post_info: Option<PostInfo>,
#[serde(default)]
reply_info: Option<ReplyInfo>,
}
impl OpenThread {
pub fn new(api: BotApi, data: &Value) -> Self {
let wire: OpenThreadWire = serde_json::from_value(data.clone()).unwrap_or_default();
Self {
api,
event_id: None,
guild_id: wire.guild_id,
channel_id: wire.channel_id,
author_id: wire.author_id,
thread_info: wire.thread_info,
post_info: wire.post_info,
reply_info: wire.reply_info,
}
}
pub fn api(&self) -> &BotApi {
&self.api
}
}
impl std::fmt::Display for OpenThread {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"OpenThread {{ channel_id: {:?}, guild_id: {:?}, author_id: {:?}, event_id: {:?} }}",
self.channel_id, self.guild_id, self.author_id, self.event_id
)
}
}