Fix failing build w/o client and move ratelimits (#426)
* Fix failing build without client feature * Feature lock Updateable and Composite
This commit is contained in:
parent
141dc32819
commit
0dfd622661
|
@ -3,12 +3,11 @@ use std::sync::{Arc, RwLock};
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::api::LimitType;
|
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::gateway::Gateway;
|
use crate::gateway::Gateway;
|
||||||
use crate::instance::{ChorusUser, Instance};
|
use crate::instance::{ChorusUser, Instance};
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{GatewayIdentifyPayload, LoginResult, LoginSchema};
|
use crate::types::{GatewayIdentifyPayload, LimitType, LoginResult, LoginSchema};
|
||||||
|
|
||||||
impl Instance {
|
impl Instance {
|
||||||
/// Logs into an existing account on the spacebar server.
|
/// Logs into an existing account on the spacebar server.
|
||||||
|
|
|
@ -6,10 +6,10 @@ use serde_json::to_string;
|
||||||
use crate::gateway::Gateway;
|
use crate::gateway::Gateway;
|
||||||
use crate::types::GatewayIdentifyPayload;
|
use crate::types::GatewayIdentifyPayload;
|
||||||
use crate::{
|
use crate::{
|
||||||
api::policies::instance::LimitType,
|
|
||||||
errors::ChorusResult,
|
errors::ChorusResult,
|
||||||
instance::{ChorusUser, Instance, Token},
|
instance::{ChorusUser, Instance, Token},
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
|
types::LimitType,
|
||||||
types::RegisterSchema,
|
types::RegisterSchema,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,12 @@ use serde_json::to_string;
|
||||||
|
|
||||||
use crate::types::{AddChannelRecipientSchema, ModifyChannelPositionsSchema};
|
use crate::types::{AddChannelRecipientSchema, ModifyChannelPositionsSchema};
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::{ChorusError, ChorusResult},
|
errors::{ChorusError, ChorusResult},
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{Channel, ChannelModifySchema, GetChannelMessagesSchema, Message, Snowflake},
|
types::{
|
||||||
|
Channel, ChannelModifySchema, GetChannelMessagesSchema, LimitType, Message, Snowflake,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
|
|
|
@ -3,13 +3,12 @@ use http::HeaderMap;
|
||||||
use reqwest::{multipart, Client};
|
use reqwest::{multipart, Client};
|
||||||
use serde_json::{from_value, to_string, Value};
|
use serde_json::{from_value, to_string, Value};
|
||||||
|
|
||||||
use crate::api::LimitType;
|
|
||||||
use crate::errors::{ChorusError, ChorusResult};
|
use crate::errors::{ChorusError, ChorusResult};
|
||||||
use crate::instance::ChorusUser;
|
use crate::instance::ChorusUser;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
Channel, CreateGreetMessage, Message, MessageAck, MessageModifySchema, MessageSearchEndpoint,
|
Channel, CreateGreetMessage, LimitType, Message, MessageAck, MessageModifySchema,
|
||||||
MessageSearchQuery, MessageSendSchema, Snowflake,
|
MessageSearchEndpoint, MessageSearchQuery, MessageSendSchema, Snowflake,
|
||||||
};
|
};
|
||||||
|
|
||||||
impl Message {
|
impl Message {
|
||||||
|
|
|
@ -2,11 +2,10 @@ use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::{ChorusError, ChorusResult},
|
errors::{ChorusError, ChorusResult},
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{self, PermissionOverwrite, Snowflake},
|
types::{self, LimitType, PermissionOverwrite, Snowflake},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl types::Channel {
|
impl types::Channel {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::ChorusResult,
|
errors::ChorusResult,
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{self, PublicUser, Snowflake},
|
types::{self, LimitType, PublicUser, Snowflake},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Useful metadata for working with [`types::Reaction`], bundled together nicely.
|
/// Useful metadata for working with [`types::Reaction`], bundled together nicely.
|
||||||
|
|
|
@ -2,14 +2,13 @@ use reqwest::Client;
|
||||||
use serde_json::from_str;
|
use serde_json::from_str;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::api::LimitType;
|
|
||||||
use crate::errors::ChorusError;
|
use crate::errors::ChorusError;
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::instance::ChorusUser;
|
use crate::instance::ChorusUser;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildBansQuery, GuildCreateSchema,
|
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildBansQuery, GuildCreateSchema,
|
||||||
GuildMember, GuildMemberSearchSchema, GuildModifySchema, GuildPreview,
|
GuildMember, GuildMemberSearchSchema, GuildModifySchema, GuildPreview, LimitType,
|
||||||
ModifyGuildMemberProfileSchema, ModifyGuildMemberSchema, UserProfileMetadata,
|
ModifyGuildMemberProfileSchema, ModifyGuildMemberSchema, UserProfileMetadata,
|
||||||
};
|
};
|
||||||
use crate::types::{GuildBan, Snowflake};
|
use crate::types::{GuildBan, Snowflake};
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::ChorusResult,
|
errors::ChorusResult,
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{self, GuildMember, Snowflake},
|
types::{self, GuildMember, LimitType, Snowflake},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl types::GuildMember {
|
impl types::GuildMember {
|
||||||
|
|
|
@ -2,11 +2,12 @@ use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::{ChorusError, ChorusResult},
|
errors::{ChorusError, ChorusResult},
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{self, RoleCreateModifySchema, RoleObject, RolePositionUpdateSchema, Snowflake},
|
types::{
|
||||||
|
self, LimitType, RoleCreateModifySchema, RoleObject, RolePositionUpdateSchema, Snowflake,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl types::RoleObject {
|
impl types::RoleObject {
|
||||||
|
|
|
@ -4,7 +4,7 @@ use serde_json::to_string;
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::instance::ChorusUser;
|
use crate::instance::ChorusUser;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{CreateChannelInviteSchema, GuildInvite, Invite, Snowflake};
|
use crate::types::{CreateChannelInviteSchema, GuildInvite, Invite, LimitType, Snowflake};
|
||||||
|
|
||||||
impl ChorusUser {
|
impl ChorusUser {
|
||||||
/// Accepts an invite to a guild, group DM, or DM.
|
/// Accepts an invite to a guild, group DM, or DM.
|
||||||
|
@ -26,7 +26,7 @@ impl ChorusUser {
|
||||||
invite_code
|
invite_code
|
||||||
))
|
))
|
||||||
.header("Authorization", self.token()),
|
.header("Authorization", self.token()),
|
||||||
limit_type: super::LimitType::Global,
|
limit_type: LimitType::Global,
|
||||||
};
|
};
|
||||||
if session_id.is_some() {
|
if session_id.is_some() {
|
||||||
request.request = request
|
request.request = request
|
||||||
|
@ -53,7 +53,7 @@ impl ChorusUser {
|
||||||
.body(to_string(&code).unwrap())
|
.body(to_string(&code).unwrap())
|
||||||
.header("Authorization", self.token())
|
.header("Authorization", self.token())
|
||||||
.header("Content-Type", "application/json"),
|
.header("Content-Type", "application/json"),
|
||||||
limit_type: super::LimitType::Global,
|
limit_type: LimitType::Global,
|
||||||
}
|
}
|
||||||
.deserialize_response::<Invite>(self)
|
.deserialize_response::<Invite>(self)
|
||||||
.await
|
.await
|
||||||
|
@ -81,7 +81,7 @@ impl ChorusUser {
|
||||||
.header("Authorization", self.token())
|
.header("Authorization", self.token())
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.body(to_string(&create_channel_invite_schema).unwrap()),
|
.body(to_string(&create_channel_invite_schema).unwrap()),
|
||||||
limit_type: super::LimitType::Channel(channel_id),
|
limit_type: LimitType::Channel(channel_id),
|
||||||
}
|
}
|
||||||
.deserialize_response::<GuildInvite>(self)
|
.deserialize_response::<GuildInvite>(self)
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -3,7 +3,6 @@ pub use channels::messages::*;
|
||||||
pub use guilds::*;
|
pub use guilds::*;
|
||||||
pub use invites::*;
|
pub use invites::*;
|
||||||
pub use policies::instance::instance::*;
|
pub use policies::instance::instance::*;
|
||||||
pub use policies::instance::ratelimits::*;
|
|
||||||
pub use users::*;
|
pub use users::*;
|
||||||
|
|
||||||
pub mod auth;
|
pub mod auth;
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
pub use instance::*;
|
pub use instance::*;
|
||||||
pub use ratelimits::*;
|
|
||||||
|
|
||||||
pub mod instance;
|
pub mod instance;
|
||||||
pub mod ratelimits;
|
|
||||||
|
|
|
@ -1,3 +1 @@
|
||||||
pub use instance::ratelimits::*;
|
|
||||||
|
|
||||||
pub mod instance;
|
pub mod instance;
|
||||||
|
|
|
@ -2,11 +2,10 @@ use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::ChorusResult,
|
errors::ChorusResult,
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{Channel, PrivateChannelCreateSchema},
|
types::{Channel, LimitType, PrivateChannelCreateSchema},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl ChorusUser {
|
impl ChorusUser {
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::api::LimitType;
|
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::instance::ChorusUser;
|
use crate::instance::ChorusUser;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{GetUserGuildSchema, Guild, Snowflake};
|
use crate::types::{GetUserGuildSchema, Guild, LimitType, Snowflake};
|
||||||
|
|
||||||
impl ChorusUser {
|
impl ChorusUser {
|
||||||
/// Leaves a given guild.
|
/// Leaves a given guild.
|
||||||
|
@ -26,7 +25,7 @@ impl ChorusUser {
|
||||||
.header("Authorization", self.token())
|
.header("Authorization", self.token())
|
||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.body(to_string(&lurking).unwrap()),
|
.body(to_string(&lurking).unwrap()),
|
||||||
limit_type: crate::api::LimitType::Guild(*guild_id),
|
limit_type: LimitType::Guild(*guild_id),
|
||||||
}
|
}
|
||||||
.handle_request_as_result(self)
|
.handle_request_as_result(self)
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -2,12 +2,12 @@ use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::ChorusResult,
|
errors::ChorusResult,
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{
|
types::{
|
||||||
self, CreateUserRelationshipSchema, FriendRequestSendSchema, RelationshipType, Snowflake,
|
self, CreateUserRelationshipSchema, FriendRequestSendSchema, LimitType, RelationshipType,
|
||||||
|
Snowflake,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,10 @@ use reqwest::Client;
|
||||||
use serde_json::to_string;
|
use serde_json::to_string;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::LimitType,
|
|
||||||
errors::{ChorusError, ChorusResult},
|
errors::{ChorusError, ChorusResult},
|
||||||
instance::{ChorusUser, Instance},
|
instance::{ChorusUser, Instance},
|
||||||
ratelimiter::ChorusRequest,
|
ratelimiter::ChorusRequest,
|
||||||
types::{User, UserModifySchema, UserSettings},
|
types::{LimitType, User, UserModifySchema, UserSettings},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl ChorusUser {
|
impl ChorusUser {
|
||||||
|
|
|
@ -8,12 +8,11 @@ use std::sync::{Arc, RwLock};
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::api::{Limit, LimitType};
|
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::gateway::{Gateway, GatewayHandle};
|
use crate::gateway::{Gateway, GatewayHandle};
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::types::subconfigs::limits::rates::RateLimits;
|
use crate::types::types::subconfigs::limits::rates::RateLimits;
|
||||||
use crate::types::{GeneralConfiguration, User, UserSettings};
|
use crate::types::{GeneralConfiguration, Limit, LimitType, User, UserSettings};
|
||||||
use crate::UrlBundle;
|
use crate::UrlBundle;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|
|
@ -8,10 +8,9 @@ use serde::Deserialize;
|
||||||
use serde_json::from_str;
|
use serde_json::from_str;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
api::{Limit, LimitType},
|
|
||||||
errors::{ChorusError, ChorusResult},
|
errors::{ChorusError, ChorusResult},
|
||||||
instance::ChorusUser,
|
instance::ChorusUser,
|
||||||
types::{types::subconfigs::limits::rates::RateLimits, LimitsConfiguration},
|
types::{types::subconfigs::limits::rates::RateLimits, Limit, LimitType, LimitsConfiguration},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Chorus' request struct. This struct is used to send rate-limited requests to the Spacebar server.
|
/// Chorus' request struct. This struct is used to send rate-limited requests to the Spacebar server.
|
||||||
|
|
|
@ -2,11 +2,9 @@ use std::collections::HashMap;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::types::{
|
||||||
api::LimitType,
|
config::types::subconfigs::limits::ratelimits::{route::RouteRateLimit, RateLimitOptions},
|
||||||
types::config::types::subconfigs::limits::ratelimits::{
|
LimitType,
|
||||||
route::RouteRateLimit, RateLimitOptions,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use crate::gateway::Updateable;
|
use crate::gateway::Updateable;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use chorus_macros::Updateable;
|
use chorus_macros::Updateable;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||||
|
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable)]
|
#[cfg_attr(feature = "client", derive(Updateable))]
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
||||||
/// See <https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object>
|
/// See <https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object>
|
||||||
pub struct AutoModerationRule {
|
pub struct AutoModerationRule {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
|
|
@ -1,21 +1,28 @@
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
use chorus_macros::{observe_option_vec, Composite, Updateable};
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::deserialize_string_from_number;
|
use serde_aux::prelude::deserialize_string_from_number;
|
||||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
entities::{GuildMember, User},
|
entities::{GuildMember, User},
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
Composite,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default, Debug, Serialize, Deserialize, Clone, Updateable, Composite)]
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{observe_option_vec, Composite, Updateable};
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Serialize, Deserialize, Clone)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
/// Represents a guild or private channel
|
/// Represents a guild or private channel
|
||||||
///
|
///
|
||||||
/// # Reference
|
/// # Reference
|
||||||
|
@ -60,13 +67,13 @@ pub struct Channel {
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
pub permission_overwrites: Option<sqlx::types::Json<Vec<PermissionOverwrite>>>,
|
pub permission_overwrites: Option<sqlx::types::Json<Vec<PermissionOverwrite>>>,
|
||||||
#[cfg(not(feature = "sqlx"))]
|
#[cfg(not(feature = "sqlx"))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub permission_overwrites: Option<Vec<Arc<RwLock<PermissionOverwrite>>>>,
|
pub permission_overwrites: Option<Vec<Arc<RwLock<PermissionOverwrite>>>>,
|
||||||
pub permissions: Option<String>,
|
pub permissions: Option<String>,
|
||||||
pub position: Option<i32>,
|
pub position: Option<i32>,
|
||||||
pub rate_limit_per_user: Option<i32>,
|
pub rate_limit_per_user: Option<i32>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub recipients: Option<Vec<Arc<RwLock<User>>>>,
|
pub recipients: Option<Vec<Arc<RwLock<User>>>>,
|
||||||
pub rtc_region: Option<String>,
|
pub rtc_region: Option<String>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
@ -126,9 +133,8 @@ pub struct Tag {
|
||||||
pub emoji_name: Option<String>,
|
pub emoji_name: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd)]
|
||||||
Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Updateable, Composite,
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
)]
|
|
||||||
pub struct PermissionOverwrite {
|
pub struct PermissionOverwrite {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
use chorus_macros::{Composite, Updateable};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
|
||||||
use crate::types::entities::User;
|
use crate::types::entities::User;
|
||||||
use crate::types::{Composite, Snowflake};
|
use crate::types::Snowflake;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize, Default, Updateable, Composite)]
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{Composite, Updateable};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// See <https://discord-userdoccers.vercel.app/resources/emoji#emoji-object>
|
/// See <https://discord-userdoccers.vercel.app/resources/emoji#emoji-object>
|
||||||
|
|
|
@ -1,25 +1,32 @@
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
use chorus_macros::{observe_option_vec, observe_vec, Composite, Updateable};
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||||
|
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
|
||||||
use crate::types::types::guild_configuration::GuildFeaturesList;
|
use crate::types::types::guild_configuration::GuildFeaturesList;
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
entities::{Channel, Emoji, RoleObject, Sticker, User, VoiceState, Webhook},
|
entities::{Channel, Emoji, RoleObject, Sticker, User, VoiceState, Webhook},
|
||||||
interfaces::WelcomeScreenObject,
|
interfaces::WelcomeScreenObject,
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
Composite,
|
|
||||||
};
|
};
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
|
|
||||||
use super::PublicUser;
|
use super::PublicUser;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{observe_option_vec, observe_vec, Composite, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
/// See <https://discord.com/developers/docs/resources/guild>
|
/// See <https://discord.com/developers/docs/resources/guild>
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable, Composite)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Guild {
|
pub struct Guild {
|
||||||
pub afk_channel_id: Option<Snowflake>,
|
pub afk_channel_id: Option<Snowflake>,
|
||||||
|
@ -34,14 +41,14 @@ pub struct Guild {
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub bans: Option<Vec<GuildBan>>,
|
pub bans: Option<Vec<GuildBan>>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub channels: Option<Vec<Arc<RwLock<Channel>>>>,
|
pub channels: Option<Vec<Arc<RwLock<Channel>>>>,
|
||||||
pub default_message_notifications: Option<MessageNotificationLevel>,
|
pub default_message_notifications: Option<MessageNotificationLevel>,
|
||||||
pub description: Option<String>,
|
pub description: Option<String>,
|
||||||
pub discovery_splash: Option<String>,
|
pub discovery_splash: Option<String>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
#[cfg_attr(feature = "client", observe_vec)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[observe_vec]
|
|
||||||
pub emojis: Vec<Arc<RwLock<Emoji>>>,
|
pub emojis: Vec<Arc<RwLock<Emoji>>>,
|
||||||
pub explicit_content_filter: Option<i32>,
|
pub explicit_content_filter: Option<i32>,
|
||||||
//#[cfg_attr(feature = "sqlx", sqlx(try_from = "String"))]
|
//#[cfg_attr(feature = "sqlx", sqlx(try_from = "String"))]
|
||||||
|
@ -77,7 +84,7 @@ pub struct Guild {
|
||||||
pub public_updates_channel_id: Option<Snowflake>,
|
pub public_updates_channel_id: Option<Snowflake>,
|
||||||
pub region: Option<String>,
|
pub region: Option<String>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub roles: Option<Vec<Arc<RwLock<RoleObject>>>>,
|
pub roles: Option<Vec<Arc<RwLock<RoleObject>>>>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub rules_channel: Option<String>,
|
pub rules_channel: Option<String>,
|
||||||
|
@ -91,10 +98,10 @@ pub struct Guild {
|
||||||
pub vanity_url_code: Option<String>,
|
pub vanity_url_code: Option<String>,
|
||||||
pub verification_level: Option<VerificationLevel>,
|
pub verification_level: Option<VerificationLevel>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>,
|
pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[cfg_attr(feature = "client", observe_option_vec)]
|
||||||
pub webhooks: Option<Vec<Arc<RwLock<Webhook>>>>,
|
pub webhooks: Option<Vec<Arc<RwLock<Webhook>>>>,
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
pub welcome_screen: Option<sqlx::types::Json<WelcomeScreenObject>>,
|
pub welcome_screen: Option<sqlx::types::Json<WelcomeScreenObject>>,
|
||||||
|
|
|
@ -10,6 +10,7 @@ pub use guild_member::*;
|
||||||
pub use integration::*;
|
pub use integration::*;
|
||||||
pub use invite::*;
|
pub use invite::*;
|
||||||
pub use message::*;
|
pub use message::*;
|
||||||
|
pub use ratelimits::*;
|
||||||
pub use relationship::*;
|
pub use relationship::*;
|
||||||
pub use role::*;
|
pub use role::*;
|
||||||
pub use security_key::*;
|
pub use security_key::*;
|
||||||
|
@ -22,9 +23,16 @@ pub use user_settings::*;
|
||||||
pub use voice_state::*;
|
pub use voice_state::*;
|
||||||
pub use webhook::*;
|
pub use webhook::*;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
mod application;
|
mod application;
|
||||||
|
@ -39,6 +47,7 @@ mod guild_member;
|
||||||
mod integration;
|
mod integration;
|
||||||
mod invite;
|
mod invite;
|
||||||
mod message;
|
mod message;
|
||||||
|
mod ratelimits;
|
||||||
mod relationship;
|
mod relationship;
|
||||||
mod role;
|
mod role;
|
||||||
mod security_key;
|
mod security_key;
|
||||||
|
@ -51,6 +60,7 @@ mod user_settings;
|
||||||
mod voice_state;
|
mod voice_state;
|
||||||
mod webhook;
|
mod webhook;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
#[async_trait(?Send)]
|
#[async_trait(?Send)]
|
||||||
pub trait Composite<T: Updateable + Clone + Debug> {
|
pub trait Composite<T: Updateable + Clone + Debug> {
|
||||||
async fn watch_whole(self, gateway: &GatewayHandle) -> Self;
|
async fn watch_whole(self, gateway: &GatewayHandle) -> Self;
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use chorus_macros::{Composite, Updateable};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::{deserialize_option_number_from_string, deserialize_string_from_number};
|
use serde_aux::prelude::{deserialize_option_number_from_string, deserialize_string_from_number};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
use crate::types::utils::Snowflake;
|
||||||
use crate::types::{utils::Snowflake, Composite};
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Updateable, Composite)]
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{Composite, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
/// See <https://discord.com/developers/docs/topics/permissions#role-object>
|
/// See <https://discord.com/developers/docs/topics/permissions#role-object>
|
||||||
pub struct RoleObject {
|
pub struct RoleObject {
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
use chorus_macros::{Composite, Updateable};
|
use crate::types::utils::Snowflake;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::deserialize_option_number_from_string;
|
use serde_aux::prelude::deserialize_option_number_from_string;
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
use crate::types::{utils::Snowflake, Composite};
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{Composite, Updateable};
|
||||||
|
|
||||||
use super::Emoji;
|
use super::Emoji;
|
||||||
|
|
||||||
|
@ -21,7 +27,8 @@ impl User {
|
||||||
PublicUser::from(self)
|
PublicUser::from(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq, Updateable, Composite)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
|
|
@ -53,15 +53,17 @@ pub struct UserSettings {
|
||||||
pub friend_source_flags: sqlx::types::Json<FriendSourceFlags>,
|
pub friend_source_flags: sqlx::types::Json<FriendSourceFlags>,
|
||||||
#[cfg(not(feature = "sqlx"))]
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub friend_source_flags: FriendSourceFlags,
|
pub friend_source_flags: FriendSourceFlags,
|
||||||
pub gateway_connected: bool,
|
pub gateway_connected: Option<bool>,
|
||||||
pub gif_auto_play: bool,
|
pub gif_auto_play: bool,
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
pub guild_folders: sqlx::types::Json<Vec<GuildFolder>>,
|
pub guild_folders: sqlx::types::Json<Vec<GuildFolder>>,
|
||||||
#[cfg(not(feature = "sqlx"))]
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub guild_folders: Vec<GuildFolder>,
|
pub guild_folders: Vec<GuildFolder>,
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
|
#[serde(default)]
|
||||||
pub guild_positions: sqlx::types::Json<Vec<String>>,
|
pub guild_positions: sqlx::types::Json<Vec<String>>,
|
||||||
#[cfg(not(feature = "sqlx"))]
|
#[cfg(not(feature = "sqlx"))]
|
||||||
|
#[serde(default)]
|
||||||
pub guild_positions: Vec<String>,
|
pub guild_positions: Vec<String>,
|
||||||
pub inline_attachment_media: bool,
|
pub inline_attachment_media: bool,
|
||||||
pub inline_embed_media: bool,
|
pub inline_embed_media: bool,
|
||||||
|
@ -98,7 +100,7 @@ impl Default for UserSettings {
|
||||||
enable_tts_command: false,
|
enable_tts_command: false,
|
||||||
explicit_content_filter: 0,
|
explicit_content_filter: 0,
|
||||||
friend_source_flags: Default::default(),
|
friend_source_flags: Default::default(),
|
||||||
gateway_connected: false,
|
gateway_connected: Some(false),
|
||||||
gif_auto_play: false,
|
gif_auto_play: false,
|
||||||
guild_folders: Default::default(),
|
guild_folders: Default::default(),
|
||||||
guild_positions: Default::default(),
|
guild_positions: Default::default(),
|
||||||
|
|
|
@ -1,20 +1,27 @@
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use chorus_macros::{Composite, Updateable};
|
use chorus_macros::{Composite, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
entities::{Guild, GuildMember},
|
entities::{Guild, GuildMember},
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
Composite,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate>
|
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate>
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable, Composite)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
pub struct VoiceState {
|
pub struct VoiceState {
|
||||||
pub guild_id: Option<Snowflake>,
|
pub guild_id: Option<Snowflake>,
|
||||||
pub guild: Option<Guild>,
|
pub guild: Option<Guild>,
|
||||||
|
|
|
@ -1,18 +1,25 @@
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
use chorus_macros::{Composite, Updateable};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use crate::gateway::{GatewayHandle, Updateable};
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use chorus_macros::{Composite, Updateable};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Composite;
|
||||||
|
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
entities::{Guild, User},
|
entities::{Guild, User},
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
Composite,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook>
|
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook>
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable, Composite)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
||||||
|
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Webhook {
|
pub struct Webhook {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::types::{
|
||||||
WebSocketEvent,
|
WebSocketEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use super::UpdateMessage;
|
use super::UpdateMessage;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Default, Clone)]
|
#[derive(Debug, Deserialize, Serialize, Default, Clone)]
|
||||||
|
@ -27,6 +28,7 @@ pub struct AutoModerationRuleUpdate {
|
||||||
pub json: String,
|
pub json: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<AutoModerationRule> for AutoModerationRuleUpdate {
|
impl UpdateMessage<AutoModerationRule> for AutoModerationRuleUpdate {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
Some(self.rule.id)
|
Some(self.rule.id)
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
use std::sync::{Arc, RwLock};
|
|
||||||
|
|
||||||
use crate::types::events::WebSocketEvent;
|
use crate::types::events::WebSocketEvent;
|
||||||
use crate::types::Guild;
|
|
||||||
use crate::types::{entities::Channel, JsonField, Snowflake};
|
use crate::types::{entities::Channel, JsonField, Snowflake};
|
||||||
use chorus_macros::JsonField;
|
use chorus_macros::JsonField;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use super::UpdateMessage;
|
use super::UpdateMessage;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use crate::types::Guild;
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize)]
|
#[derive(Debug, Default, Deserialize, Serialize)]
|
||||||
/// See <https://discord.com/developers/docs/topics/gateway-events#channel-pins-update>
|
/// See <https://discord.com/developers/docs/topics/gateway-events#channel-pins-update>
|
||||||
pub struct ChannelPinsUpdate {
|
pub struct ChannelPinsUpdate {
|
||||||
|
@ -30,6 +34,7 @@ pub struct ChannelCreate {
|
||||||
|
|
||||||
impl WebSocketEvent for ChannelCreate {}
|
impl WebSocketEvent for ChannelCreate {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<Guild> for ChannelCreate {
|
impl UpdateMessage<Guild> for ChannelCreate {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
self.channel.guild_id
|
self.channel.guild_id
|
||||||
|
@ -57,6 +62,7 @@ pub struct ChannelUpdate {
|
||||||
|
|
||||||
impl WebSocketEvent for ChannelUpdate {}
|
impl WebSocketEvent for ChannelUpdate {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<Channel> for ChannelUpdate {
|
impl UpdateMessage<Channel> for ChannelUpdate {
|
||||||
fn update(&mut self, object_to_update: Arc<RwLock<Channel>>) {
|
fn update(&mut self, object_to_update: Arc<RwLock<Channel>>) {
|
||||||
let mut write = object_to_update.write().unwrap();
|
let mut write = object_to_update.write().unwrap();
|
||||||
|
@ -96,6 +102,7 @@ pub struct ChannelDelete {
|
||||||
pub json: String,
|
pub json: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<Guild> for ChannelDelete {
|
impl UpdateMessage<Guild> for ChannelDelete {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
self.channel.guild_id
|
self.channel.guild_id
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
use std::sync::{Arc, RwLock};
|
|
||||||
|
|
||||||
use chorus_macros::JsonField;
|
use chorus_macros::JsonField;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -11,7 +9,12 @@ use crate::types::{
|
||||||
Sticker,
|
Sticker,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{PresenceUpdate, UpdateMessage};
|
use super::PresenceUpdate;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use super::UpdateMessage;
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
#[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>;
|
||||||
|
@ -179,6 +182,7 @@ pub struct GuildRoleCreate {
|
||||||
|
|
||||||
impl WebSocketEvent for GuildRoleCreate {}
|
impl WebSocketEvent for GuildRoleCreate {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<Guild> for GuildRoleCreate {
|
impl UpdateMessage<Guild> for GuildRoleCreate {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
Some(self.guild_id)
|
Some(self.guild_id)
|
||||||
|
@ -209,6 +213,7 @@ pub struct GuildRoleUpdate {
|
||||||
|
|
||||||
impl WebSocketEvent for GuildRoleUpdate {}
|
impl WebSocketEvent for GuildRoleUpdate {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<RoleObject> for GuildRoleUpdate {
|
impl UpdateMessage<RoleObject> for GuildRoleUpdate {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
Some(self.role.id)
|
Some(self.role.id)
|
||||||
|
|
|
@ -1,12 +1,5 @@
|
||||||
use std::sync::{Arc, RwLock};
|
|
||||||
|
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use serde::de::DeserializeOwned;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use serde_json::{from_str, from_value, to_value, Value};
|
|
||||||
|
|
||||||
pub use application::*;
|
pub use application::*;
|
||||||
pub use auto_moderation::*;
|
pub use auto_moderation::*;
|
||||||
pub use call::*;
|
pub use call::*;
|
||||||
|
@ -34,9 +27,23 @@ pub use voice::*;
|
||||||
pub use webhooks::*;
|
pub use webhooks::*;
|
||||||
pub use webrtc::*;
|
pub use webrtc::*;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use super::Snowflake;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use crate::gateway::Updateable;
|
use crate::gateway::Updateable;
|
||||||
|
|
||||||
use super::Snowflake;
|
#[cfg(feature = "client")]
|
||||||
|
use serde_json::{from_str, from_value, to_value, Value};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
|
use serde::de::DeserializeOwned;
|
||||||
|
|
||||||
mod application;
|
mod application;
|
||||||
mod auto_moderation;
|
mod auto_moderation;
|
||||||
|
@ -107,6 +114,7 @@ pub struct GatewayReceivePayload<'a> {
|
||||||
|
|
||||||
impl<'a> WebSocketEvent for GatewayReceivePayload<'a> {}
|
impl<'a> WebSocketEvent for GatewayReceivePayload<'a> {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
/// An [`UpdateMessage<T>`] represents a received Gateway Message which contains updated
|
/// An [`UpdateMessage<T>`] represents a received Gateway Message which contains updated
|
||||||
/// information for an [`Updateable`] of Type T.
|
/// information for an [`Updateable`] of Type T.
|
||||||
/// # Example:
|
/// # Example:
|
||||||
|
@ -134,6 +142,7 @@ pub(crate) trait JsonField: Clone {
|
||||||
fn get_json(&self) -> String;
|
fn get_json(&self) -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
/// Only applicable for events where the Update struct is the same as the Entity struct
|
/// Only applicable for events where the Update struct is the same as the Entity struct
|
||||||
pub(crate) fn update_object(
|
pub(crate) fn update_object(
|
||||||
value: String,
|
value: String,
|
||||||
|
|
|
@ -5,6 +5,7 @@ use crate::types::entities::{Channel, ThreadMember};
|
||||||
use crate::types::events::WebSocketEvent;
|
use crate::types::events::WebSocketEvent;
|
||||||
use crate::types::{JsonField, Snowflake};
|
use crate::types::{JsonField, Snowflake};
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
use super::UpdateMessage;
|
use super::UpdateMessage;
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
|
||||||
|
@ -27,6 +28,7 @@ pub struct ThreadUpdate {
|
||||||
|
|
||||||
impl WebSocketEvent for ThreadUpdate {}
|
impl WebSocketEvent for ThreadUpdate {}
|
||||||
|
|
||||||
|
#[cfg(feature = "client")]
|
||||||
impl UpdateMessage<Channel> for ThreadUpdate {
|
impl UpdateMessage<Channel> for ThreadUpdate {
|
||||||
fn id(&self) -> Option<Snowflake> {
|
fn id(&self) -> Option<Snowflake> {
|
||||||
Some(self.thread.id)
|
Some(self.thread.id)
|
||||||
|
|
Loading…
Reference in New Issue