use serde::{Deserialize, Serialize};
use crate::entities::{Channel, GuildMember, ThreadMember};
use crate::events::WebSocketEvent;
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadCreate {
pub thread: Channel,
}
impl WebSocketEvent for ThreadCreate {}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadUpdate {
pub thread: Channel,
}
impl WebSocketEvent for ThreadUpdate {}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadDelete {
pub thread: Channel,
}
impl WebSocketEvent for ThreadDelete {}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadListSync {
pub guild_id: String,
pub channel_ids: Option<Vec<String>>,
pub threads: Vec<Channel>,
pub members: Vec<ThreadMember>,
}
impl WebSocketEvent for ThreadListSync {}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadMemberUpdate {
pub id: Option<u64>,
pub user_id: Option<u64>,
pub join_timestamp: Option<String>,
pub flags: Option<u64>,
pub member: Option<GuildMember>,
pub guild_id: String,
}
impl ThreadMemberUpdate {
pub fn to_thread_member(self) -> ThreadMember {
ThreadMember {
id: self.id,
user_id: self.user_id,
join_timestamp: self.join_timestamp.clone(),
flags: self.flags,
member: self.member.clone(),
}
}
}
impl WebSocketEvent for ThreadMemberUpdate {}
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct ThreadMembersUpdate {
pub id: String,
pub guild_id: String,
pub member_count: u8,
pub added_members: Option<Vec<ThreadMember>>,
pub removed_members: Option<Vec<String>>,
}
impl WebSocketEvent for ThreadMembersUpdate {}