Add GuildRoleCreate and -Update
This commit is contained in:
parent
c5cfa9ba19
commit
8a925631ee
|
@ -1,7 +1,8 @@
|
||||||
use crate::errors::GatewayError;
|
use crate::errors::GatewayError;
|
||||||
use crate::gateway::events::Events;
|
use crate::gateway::events::Events;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
self, Channel, ChannelUpdate, Composite, JsonField, Snowflake, UpdateMessage, WebSocketEvent,
|
self, Channel, ChannelUpdate, Composite, Guild, GuildRoleCreate, GuildRoleUpdate, JsonField,
|
||||||
|
RoleObject, Snowflake, UpdateMessage, WebSocketEvent,
|
||||||
};
|
};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
|
@ -231,6 +232,8 @@ impl GatewayHandle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Recursively observes and updates all updateable fields on the struct T. Returns an object
|
||||||
|
/// with all of its observable fields being observed.
|
||||||
pub async fn observe_and_get<T: Updateable + Clone + Composite<T>>(
|
pub async fn observe_and_get<T: Updateable + Clone + Composite<T>>(
|
||||||
&self,
|
&self,
|
||||||
object: Arc<RwLock<T>>,
|
object: Arc<RwLock<T>>,
|
||||||
|
@ -240,6 +243,8 @@ impl GatewayHandle {
|
||||||
object
|
object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Recursively observes and updates all updateable fields on the struct T. Returns an object `T`
|
||||||
|
/// with all of its observable fields being observed.
|
||||||
pub async fn observe_and_into_inner<T: Updateable + Clone + Composite<T>>(
|
pub async fn observe_and_into_inner<T: Updateable + Clone + Composite<T>>(
|
||||||
&self,
|
&self,
|
||||||
object: Arc<RwLock<T>>,
|
object: Arc<RwLock<T>>,
|
||||||
|
@ -592,8 +597,8 @@ impl Gateway {
|
||||||
"GUILD_MEMBER_REMOVE" => guild.member_remove,
|
"GUILD_MEMBER_REMOVE" => guild.member_remove,
|
||||||
"GUILD_MEMBER_UPDATE" => guild.member_update,
|
"GUILD_MEMBER_UPDATE" => guild.member_update,
|
||||||
"GUILD_MEMBERS_CHUNK" => guild.members_chunk,
|
"GUILD_MEMBERS_CHUNK" => guild.members_chunk,
|
||||||
"GUILD_ROLE_CREATE" => guild.role_create,
|
"GUILD_ROLE_CREATE" => guild.role_create GuildRoleCreate: Guild,
|
||||||
"GUILD_ROLE_UPDATE" => guild.role_update,
|
"GUILD_ROLE_UPDATE" => guild.role_update GuildRoleUpdate: RoleObject,
|
||||||
"GUILD_ROLE_DELETE" => guild.role_delete,
|
"GUILD_ROLE_DELETE" => guild.role_delete,
|
||||||
"GUILD_SCHEDULED_EVENT_CREATE" => guild.role_scheduled_event_create,
|
"GUILD_SCHEDULED_EVENT_CREATE" => guild.role_scheduled_event_create,
|
||||||
"GUILD_SCHEDULED_EVENT_UPDATE" => guild.role_scheduled_event_update,
|
"GUILD_SCHEDULED_EVENT_UPDATE" => guild.role_scheduled_event_update,
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
|
use chorus_macros::JsonField;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::entities::{Guild, PublicUser, UnavailableGuild};
|
use crate::types::entities::{Guild, PublicUser, UnavailableGuild};
|
||||||
use crate::types::events::WebSocketEvent;
|
use crate::types::events::WebSocketEvent;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
AuditLogEntry, Emoji, GuildMember, GuildScheduledEvent, RoleObject, Snowflake, Sticker,
|
AuditLogEntry, Emoji, GuildMember, GuildScheduledEvent, JsonField, RoleObject, Snowflake,
|
||||||
|
Sticker,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::PresenceUpdate;
|
use super::{PresenceUpdate, UpdateMessage};
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Default, Clone)]
|
#[derive(Debug, Deserialize, Serialize, Default, Clone)]
|
||||||
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-create>;
|
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-create>;
|
||||||
|
@ -164,24 +168,58 @@ pub struct GuildMembersChunk {
|
||||||
|
|
||||||
impl WebSocketEvent for GuildMembersChunk {}
|
impl WebSocketEvent for GuildMembersChunk {}
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
#[derive(Debug, Default, Deserialize, Serialize, Clone, JsonField)]
|
||||||
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-create>
|
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-create>
|
||||||
pub struct GuildRoleCreate {
|
pub struct GuildRoleCreate {
|
||||||
pub guild_id: Snowflake,
|
pub guild_id: Snowflake,
|
||||||
pub role: RoleObject,
|
pub role: RoleObject,
|
||||||
|
#[serde(skip)]
|
||||||
|
pub json: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebSocketEvent for GuildRoleCreate {}
|
impl WebSocketEvent for GuildRoleCreate {}
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
impl UpdateMessage<Guild> for GuildRoleCreate {
|
||||||
|
fn id(&self) -> Snowflake {
|
||||||
|
self.guild_id
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, object_to_update: Arc<RwLock<Guild>>) {
|
||||||
|
let mut object_to_update = object_to_update.write().unwrap();
|
||||||
|
if object_to_update.roles.is_some() {
|
||||||
|
object_to_update
|
||||||
|
.roles
|
||||||
|
.as_mut()
|
||||||
|
.unwrap()
|
||||||
|
.push(Arc::new(RwLock::new(self.role.clone())));
|
||||||
|
} else {
|
||||||
|
object_to_update.roles = Some(Vec::from([Arc::new(RwLock::new(self.role.clone()))]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Deserialize, Serialize, Clone, JsonField)]
|
||||||
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-update>
|
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-update>
|
||||||
pub struct GuildRoleUpdate {
|
pub struct GuildRoleUpdate {
|
||||||
pub guild_id: Snowflake,
|
pub guild_id: Snowflake,
|
||||||
pub role: RoleObject,
|
pub role: RoleObject,
|
||||||
|
#[serde(skip)]
|
||||||
|
pub json: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebSocketEvent for GuildRoleUpdate {}
|
impl WebSocketEvent for GuildRoleUpdate {}
|
||||||
|
|
||||||
|
impl UpdateMessage<RoleObject> for GuildRoleUpdate {
|
||||||
|
fn id(&self) -> Snowflake {
|
||||||
|
self.role.id
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, object_to_update: Arc<RwLock<RoleObject>>) {
|
||||||
|
let mut write = object_to_update.write().unwrap();
|
||||||
|
*write = self.role.clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
||||||
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-delete>
|
/// See <https://discord.com/developers/docs/topics/gateway-events#guild-role-delete>
|
||||||
pub struct GuildRoleDelete {
|
pub struct GuildRoleDelete {
|
||||||
|
|
Loading…
Reference in New Issue