Start component-izing entities, remove PartialEq wherever needed (because PartialEq isn't implemented for Mutex)

This commit is contained in:
bitfl0wer 2023-08-02 20:18:16 +02:00
parent 917f1cfb0d
commit 9f69f57635
21 changed files with 133 additions and 82 deletions

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use bitflags::bitflags; use bitflags::bitflags;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
@ -6,7 +8,7 @@ use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::types::utils::Snowflake; use crate::types::utils::Snowflake;
use crate::types::{Team, User}; use crate::types::{Team, User};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// # Reference /// # Reference
/// See <https://discord.com/developers/docs/resources/application#application-resource> /// See <https://discord.com/developers/docs/resources/application#application-resource>
@ -25,7 +27,7 @@ pub struct Application {
pub bot_require_code_grant: bool, pub bot_require_code_grant: bool,
pub verify_key: String, pub verify_key: String,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub owner: User, pub owner: Arc<Mutex<User>>,
pub flags: u64, pub flags: u64,
#[cfg(feature = "sqlx")] #[cfg(feature = "sqlx")]
pub redirect_uris: Option<sqlx::types::Json<Vec<String>>>, pub redirect_uris: Option<sqlx::types::Json<Vec<String>>>,
@ -47,7 +49,7 @@ pub struct Application {
#[cfg(feature = "sqlx")] #[cfg(feature = "sqlx")]
pub install_params: Option<sqlx::types::Json<InstallParams>>, pub install_params: Option<sqlx::types::Json<InstallParams>>,
#[cfg(not(feature = "sqlx"))] #[cfg(not(feature = "sqlx"))]
pub install_params: Option<InstallParams>, pub install_params: Option<Arc<Mutex<InstallParams>>>,
pub terms_of_service_url: Option<String>, pub terms_of_service_url: Option<String>,
pub privacy_policy_url: Option<String>, pub privacy_policy_url: Option<String>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
@ -94,7 +96,7 @@ impl Application {
} }
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// # Reference /// # Reference
/// See <https://discord.com/developers/docs/resources/application#install-params-object> /// See <https://discord.com/developers/docs/resources/application#install-params-object>
pub struct InstallParams { pub struct InstallParams {
@ -103,7 +105,7 @@ pub struct InstallParams {
} }
bitflags! { bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
/// # Reference /// # Reference
/// See <https://discord.com/developers/docs/resources/application#application-object-application-flags> /// See <https://discord.com/developers/docs/resources/application#application-object-application-flags>
pub struct ApplicationFlags: u64 { pub struct ApplicationFlags: u64 {
@ -132,7 +134,7 @@ bitflags! {
} }
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// # Reference /// # Reference
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object> /// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object>
pub struct ApplicationCommand { pub struct ApplicationCommand {
@ -140,10 +142,10 @@ pub struct ApplicationCommand {
pub application_id: Snowflake, pub application_id: Snowflake,
pub name: String, pub name: String,
pub description: String, pub description: String,
pub options: Vec<ApplicationCommandOption>, pub options: Vec<Arc<Mutex<ApplicationCommandOption>>>,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// Reference /// Reference
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure> /// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure>
pub struct ApplicationCommandOption { pub struct ApplicationCommandOption {
@ -152,16 +154,16 @@ pub struct ApplicationCommandOption {
pub description: String, pub description: String,
pub required: bool, pub required: bool,
pub choices: Vec<ApplicationCommandOptionChoice>, pub choices: Vec<ApplicationCommandOptionChoice>,
pub options: Vec<ApplicationCommandOption>, pub options: Arc<Mutex<Vec<ApplicationCommandOption>>>,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApplicationCommandOptionChoice { pub struct ApplicationCommandOptionChoice {
pub name: String, pub name: String,
pub value: Value, pub value: Value,
} }
#[derive(Debug, Clone, Copy, PartialEq, Serialize_repr, Deserialize_repr)] #[derive(Debug, Clone, Copy, Serialize_repr, Deserialize_repr)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[repr(i32)] #[repr(i32)]
/// # Reference /// # Reference
@ -184,30 +186,30 @@ pub enum ApplicationCommandOptionType {
Attachment = 11, Attachment = 11,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApplicationCommandInteractionData { pub struct ApplicationCommandInteractionData {
pub id: Snowflake, pub id: Snowflake,
pub name: String, pub name: String,
pub options: Vec<ApplicationCommandInteractionDataOption>, pub options: Vec<Arc<Mutex<ApplicationCommandInteractionDataOption>>>,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApplicationCommandInteractionDataOption { pub struct ApplicationCommandInteractionDataOption {
pub name: String, pub name: String,
pub value: Value, pub value: Value,
pub options: Vec<ApplicationCommandInteractionDataOption>, pub options: Vec<Arc<Mutex<ApplicationCommandInteractionDataOption>>>,
} }
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Default, Clone, Serialize, Deserialize)]
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure> /// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure>
pub struct GuildApplicationCommandPermissions { pub struct GuildApplicationCommandPermissions {
pub id: Snowflake, pub id: Snowflake,
pub application_id: Snowflake, pub application_id: Snowflake,
pub guild_id: Snowflake, pub guild_id: Snowflake,
pub permissions: Vec<ApplicationCommandPermission>, pub permissions: Vec<Arc<Mutex<ApplicationCommandPermission>>>,
} }
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Default, Clone, Serialize, Deserialize)]
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure> /// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure>
pub struct ApplicationCommandPermission { pub struct ApplicationCommandPermission {
pub id: Snowflake, pub id: Snowflake,
@ -217,7 +219,7 @@ pub struct ApplicationCommandPermission {
pub permission: bool, pub permission: bool,
} }
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, PartialEq)] #[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")] #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[repr(u8)] #[repr(u8)]
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type> /// See <https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type>

View File

@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
use crate::types::utils::Snowflake; use crate::types::utils::Snowflake;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// # Reference /// # Reference
/// See <https://discord.com/developers/docs/resources/channel#attachment-object> /// See <https://discord.com/developers/docs/resources/channel#attachment-object>

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::utils::Snowflake; use crate::types::utils::Snowflake;
@ -6,7 +8,7 @@ use crate::types::utils::Snowflake;
/// See <https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object> /// See <https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object>
pub struct AuditLogEntry { pub struct AuditLogEntry {
pub target_id: Option<String>, pub target_id: Option<String>,
pub changes: Option<Vec<AuditLogChange>>, pub changes: Option<Vec<Arc<Mutex<AuditLogChange>>>>,
pub user_id: Option<Snowflake>, pub user_id: Option<Snowflake>,
pub id: Snowflake, pub id: Snowflake,
// to:do implement an enum for these types // to:do implement an enum for these types

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr}; use serde_repr::{Deserialize_repr, Serialize_repr};
@ -12,8 +14,8 @@ pub struct AutoModerationRule {
pub creator_id: Snowflake, pub creator_id: Snowflake,
pub event_type: AutoModerationRuleEventType, pub event_type: AutoModerationRuleEventType,
pub trigger_type: AutoModerationRuleTriggerType, pub trigger_type: AutoModerationRuleTriggerType,
pub trigger_metadata: AutoModerationRuleTriggerMetadata, pub trigger_metadata: Arc<Mutex<AutoModerationRuleTriggerMetadata>>,
pub actions: Vec<AutoModerationAction>, pub actions: Vec<Arc<Mutex<AutoModerationAction>>>,
pub enabled: bool, pub enabled: bool,
pub exempt_roles: Vec<Snowflake>, pub exempt_roles: Vec<Snowflake>,
pub exempt_channels: Vec<Snowflake>, pub exempt_channels: Vec<Snowflake>,
@ -90,7 +92,7 @@ pub enum AutoModerationRuleKeywordPresetType {
pub struct AutoModerationAction { pub struct AutoModerationAction {
#[serde(rename = "type")] #[serde(rename = "type")]
pub action_type: AutoModerationActionType, pub action_type: AutoModerationActionType,
pub metadata: Option<AutoModerationActionMetadata>, pub metadata: Option<Arc<Mutex<AutoModerationActionMetadata>>>,
} }
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)] #[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)]

View File

@ -10,7 +10,7 @@ use crate::types::{
utils::Snowflake, utils::Snowflake,
}; };
#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Updateable)] #[derive(Default, Debug, Serialize, Deserialize, Clone, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// Represents a guild of private channel /// Represents a guild of private channel
/// ///
@ -71,7 +71,41 @@ pub struct Channel {
pub video_quality_mode: Option<i32>, pub video_quality_mode: Option<i32>,
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] impl PartialEq for Channel {
fn eq(&self, other: &Self) -> bool {
self.application_id == other.application_id
&& self.bitrate == other.bitrate
&& self.channel_type == other.channel_type
&& self.created_at == other.created_at
&& self.default_auto_archive_duration == other.default_auto_archive_duration
&& self.default_forum_layout == other.default_forum_layout
&& self.default_sort_order == other.default_sort_order
&& self.default_thread_rate_limit_per_user == other.default_thread_rate_limit_per_user
&& self.flags == other.flags
&& self.guild_id == other.guild_id
&& self.icon == other.icon
&& self.id == other.id
&& self.last_message_id == other.last_message_id
&& self.last_pin_timestamp == other.last_pin_timestamp
&& self.managed == other.managed
&& self.member_count == other.member_count
&& self.message_count == other.message_count
&& self.name == other.name
&& self.nsfw == other.nsfw
&& self.owner_id == other.owner_id
&& self.parent_id == other.parent_id
&& self.permissions == other.permissions
&& self.position == other.position
&& self.rate_limit_per_user == other.rate_limit_per_user
&& self.rtc_region == other.rtc_region
&& self.topic == other.topic
&& self.total_message_sent == other.total_message_sent
&& self.user_limit == other.user_limit
&& self.video_quality_mode == other.video_quality_mode
}
}
#[derive(Debug, Deserialize, Serialize, Clone)]
/// A tag that can be applied to a thread in a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel. /// A tag that can be applied to a thread in a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel.
/// ///
/// # Reference /// # Reference
@ -86,7 +120,7 @@ pub struct Tag {
pub emoji_name: Option<String>, pub emoji_name: Option<String>,
} }
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PermissionOverwrite { pub struct PermissionOverwrite {
pub id: Snowflake, pub id: Snowflake,
#[serde(rename = "type")] #[serde(rename = "type")]
@ -100,7 +134,7 @@ pub struct PermissionOverwrite {
pub deny: String, pub deny: String,
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone)]
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-metadata-object> /// See <https://discord-userdoccers.vercel.app/resources/channel#thread-metadata-object>
pub struct ThreadMetadata { pub struct ThreadMetadata {
@ -112,7 +146,7 @@ pub struct ThreadMetadata {
pub create_timestamp: Option<String>, pub create_timestamp: Option<String>,
} }
#[derive(Default, Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Default, Debug, Deserialize, Serialize, Clone)]
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-member-object> /// See <https://discord-userdoccers.vercel.app/resources/channel#thread-member-object>
pub struct ThreadMember { pub struct ThreadMember {
@ -123,7 +157,7 @@ pub struct ThreadMember {
pub member: Option<GuildMember>, pub member: Option<GuildMember>,
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone)]
/// Specifies the emoji to use as the default way to react to a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel post. /// Specifies the emoji to use as the default way to react to a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel post.
/// ///
/// # Reference /// # Reference
@ -134,7 +168,7 @@ pub struct DefaultReaction {
pub emoji_name: Option<String>, pub emoji_name: Option<String>,
} }
#[derive(Default, Clone, Copy, Debug, Serialize_repr, Deserialize_repr, PartialEq, Eq)] #[derive(Default, Clone, Copy, Debug, Serialize_repr, Deserialize_repr, PartialEq)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")] #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[repr(i32)] #[repr(i32)]

View File

@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::entities::User; use crate::types::entities::User;
use crate::types::Snowflake; use crate::types::Snowflake;
#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize, Default)] #[derive(Debug, Clone, Deserialize, Serialize, Default)]
#[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>

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
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};
@ -10,7 +12,7 @@ use crate::types::{
}; };
/// See <https://discord.com/developers/docs/resources/guild> /// See <https://discord.com/developers/docs/resources/guild>
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[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>,
@ -25,13 +27,13 @@ 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))]
pub channels: Option<Vec<Channel>>, pub channels: Option<Vec<Arc<Mutex<Channel>>>>,
pub default_message_notifications: Option<i32>, pub default_message_notifications: Option<i32>,
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))]
#[serde(default)] #[serde(default)]
pub emojis: Vec<Emoji>, pub emojis: Vec<Arc<Mutex<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"))]
pub features: Option<GuildFeaturesList>, pub features: Option<GuildFeaturesList>,
@ -91,7 +93,7 @@ pub struct Guild {
} }
/// See <https://docs.spacebar.chat/routes/#get-/guilds/-guild_id-/bans/-user-> /// See <https://docs.spacebar.chat/routes/#get-/guilds/-guild_id-/bans/-user->
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct GuildBan { pub struct GuildBan {
pub user_id: Snowflake, pub user_id: Snowflake,
@ -100,7 +102,7 @@ pub struct GuildBan {
} }
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-invite> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-invite>
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct GuildInvite { pub struct GuildInvite {
pub code: String, pub code: String,
@ -122,13 +124,13 @@ pub struct GuildInvite {
pub vanity_url: Option<bool>, pub vanity_url: Option<bool>,
} }
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
pub struct UnavailableGuild { pub struct UnavailableGuild {
id: Snowflake, id: Snowflake,
unavailable: bool, unavailable: bool,
} }
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
pub struct GuildCreateResponse { pub struct GuildCreateResponse {
pub id: Snowflake, pub id: Snowflake,
} }

View File

@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
use crate::types::{entities::PublicUser, Snowflake}; use crate::types::{entities::PublicUser, Snowflake};
#[derive(Debug, Deserialize, Default, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Default, Serialize, Clone)]
/// Represents a participating user in a guild. /// Represents a participating user in a guild.
/// ///
/// # Reference /// # Reference

View File

@ -56,7 +56,7 @@ pub struct InviteGuild {
/// See <https://discord-userdoccers.vercel.app/resources/guild#nsfw-level> for an explanation on what /// See <https://discord-userdoccers.vercel.app/resources/guild#nsfw-level> for an explanation on what
/// the levels mean. /// the levels mean.
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")] #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum NSFWLevel { pub enum NSFWLevel {
Default = 0, Default = 0,

View File

@ -8,7 +8,7 @@ use crate::types::{
utils::Snowflake, utils::Snowflake,
}; };
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)] #[derive(Debug, Serialize, Deserialize, Default, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// Represents a message sent in a channel. /// Represents a message sent in a channel.
/// ///
@ -67,7 +67,7 @@ pub struct Message {
pub role_subscription_data: Option<RoleSubscriptionData>, pub role_subscription_data: Option<RoleSubscriptionData>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/message#message-reference-object> /// See <https://discord-userdoccers.vercel.app/resources/message#message-reference-object>
pub struct MessageReference { pub struct MessageReference {
@ -77,7 +77,7 @@ pub struct MessageReference {
pub fail_if_not_exists: Option<bool>, pub fail_if_not_exists: Option<bool>,
} }
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] #[derive(Debug, Clone, Deserialize, Serialize)]
pub struct MessageInteraction { pub struct MessageInteraction {
pub id: Snowflake, pub id: Snowflake,
#[serde(rename = "type")] #[serde(rename = "type")]
@ -87,7 +87,7 @@ pub struct MessageInteraction {
pub member: Option<GuildMember>, pub member: Option<GuildMember>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AllowedMention { pub struct AllowedMention {
parse: Vec<AllowedMentionType>, parse: Vec<AllowedMentionType>,
roles: Vec<Snowflake>, roles: Vec<Snowflake>,
@ -95,7 +95,7 @@ pub struct AllowedMention {
replied_user: bool, replied_user: bool,
} }
#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum AllowedMentionType { pub enum AllowedMentionType {
Roles, Roles,
@ -103,7 +103,7 @@ pub enum AllowedMentionType {
Everyone, Everyone,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChannelMention { pub struct ChannelMention {
pub id: Snowflake, pub id: Snowflake,
pub guild_id: Snowflake, pub guild_id: Snowflake,
@ -112,7 +112,7 @@ pub struct ChannelMention {
name: String, name: String,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Embed { pub struct Embed {
title: Option<String>, title: Option<String>,
#[serde(rename = "type")] #[serde(rename = "type")]
@ -130,14 +130,14 @@ pub struct Embed {
fields: Option<Vec<EmbedField>>, fields: Option<Vec<EmbedField>>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedFooter { pub struct EmbedFooter {
text: String, text: String,
icon_url: Option<String>, icon_url: Option<String>,
proxy_icon_url: Option<String>, proxy_icon_url: Option<String>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedImage { pub struct EmbedImage {
url: String, url: String,
proxy_url: String, proxy_url: String,
@ -145,7 +145,7 @@ pub struct EmbedImage {
width: Option<i32>, width: Option<i32>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedThumbnail { pub struct EmbedThumbnail {
url: String, url: String,
proxy_url: Option<String>, proxy_url: Option<String>,
@ -153,7 +153,7 @@ pub struct EmbedThumbnail {
width: Option<i32>, width: Option<i32>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
struct EmbedVideo { struct EmbedVideo {
url: Option<String>, url: Option<String>,
proxy_url: Option<String>, proxy_url: Option<String>,
@ -161,13 +161,13 @@ struct EmbedVideo {
width: Option<i32>, width: Option<i32>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedProvider { pub struct EmbedProvider {
name: Option<String>, name: Option<String>,
url: Option<String>, url: Option<String>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedAuthor { pub struct EmbedAuthor {
name: String, name: String,
url: Option<String>, url: Option<String>,
@ -175,14 +175,14 @@ pub struct EmbedAuthor {
proxy_icon_url: Option<String>, proxy_icon_url: Option<String>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedField { pub struct EmbedField {
name: String, name: String,
value: String, value: String,
inline: Option<bool>, inline: Option<bool>,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reaction { pub struct Reaction {
pub count: u32, pub count: u32,
pub burst_count: u32, pub burst_count: u32,
@ -192,7 +192,7 @@ pub struct Reaction {
pub emoji: Emoji, pub emoji: Emoji,
} }
#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum Component { pub enum Component {
ActionRow = 1, ActionRow = 1,
Button = 2, Button = 2,
@ -204,7 +204,7 @@ pub enum Component {
ChannelSelect = 8, ChannelSelect = 8,
} }
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/message#message-activity-object> /// See <https://discord-userdoccers.vercel.app/resources/message#message-activity-object>
pub struct MessageActivity { pub struct MessageActivity {

View File

@ -6,7 +6,7 @@ use crate::types::Snowflake;
use super::PublicUser; use super::PublicUser;
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone, Default)]
/// See <https://discord-userdoccers.vercel.app/resources/user#relationship-structure> /// See <https://discord-userdoccers.vercel.app/resources/user#relationship-structure>
pub struct Relationship { pub struct Relationship {
pub id: Snowflake, pub id: Snowflake,
@ -17,6 +17,15 @@ pub struct Relationship {
pub since: Option<DateTime<Utc>>, pub since: Option<DateTime<Utc>>,
} }
impl PartialEq for Relationship {
fn eq(&self, other: &Self) -> bool {
self.id == other.id
&& self.relationship_type == other.relationship_type
&& self.since == other.since
&& self.nickname == other.nickname
}
}
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default, Eq, PartialEq)] #[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default, Eq, PartialEq)]
#[repr(u8)] #[repr(u8)]
/// See <https://discord-userdoccers.vercel.app/resources/user#relationship-type> /// See <https://discord-userdoccers.vercel.app/resources/user#relationship-type>

View File

@ -26,7 +26,7 @@ pub struct RoleObject {
pub tags: Option<RoleTags>, pub tags: Option<RoleTags>,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoleSubscriptionData { pub struct RoleSubscriptionData {
pub role_subscription_listing_id: Snowflake, pub role_subscription_listing_id: Snowflake,
pub tier_name: String, pub tier_name: String,
@ -34,7 +34,7 @@ pub struct RoleSubscriptionData {
pub is_renewal: bool, pub is_renewal: bool,
} }
#[derive(Serialize, Deserialize, Debug, Default, Clone, Eq, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq, Hash)]
/// See <https://discord.com/developers/docs/topics/permissions#role-object-role-tags-structure> /// See <https://discord.com/developers/docs/topics/permissions#role-object-role-tags-structure>
pub struct RoleTags { pub struct RoleTags {
#[serde(default)] #[serde(default)]
@ -53,7 +53,7 @@ pub struct RoleTags {
} }
bitflags! { bitflags! {
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] #[derive(Debug, Default, Clone, Hash, Serialize, Deserialize)]
/// Permissions limit what users of certain roles can do on a Guild to Guild basis. /// Permissions limit what users of certain roles can do on a Guild to Guild basis.
/// ///
/// # Reference: /// # Reference:

View File

@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
use crate::types::utils::Snowflake; use crate::types::utils::Snowflake;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct SecurityKey { pub struct SecurityKey {
pub id: String, pub id: String,

View File

@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
use crate::types::{entities::User, utils::Snowflake}; use crate::types::{entities::User, utils::Snowflake};
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[derive(Debug, Serialize, Deserialize, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// Represents a sticker that can be sent in messages. /// Represents a sticker that can be sent in messages.
/// ///
@ -26,7 +26,7 @@ pub struct Sticker {
pub sort_value: Option<u8>, pub sort_value: Option<u8>,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
/// A partial sticker object. /// A partial sticker object.
/// ///
/// Represents the smallest amount of data required to render a sticker. /// Represents the smallest amount of data required to render a sticker.

View File

@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::entities::User; use crate::types::entities::User;
use crate::types::Snowflake; use crate::types::Snowflake;
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)] #[derive(Debug, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct Team { pub struct Team {
pub icon: Option<String>, pub icon: Option<String>,
@ -14,7 +14,7 @@ pub struct Team {
pub owner_user_id: Snowflake, pub owner_user_id: Snowflake,
} }
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)] #[derive(Debug, Deserialize, Serialize, Clone)]
pub struct TeamMember { pub struct TeamMember {
pub membership_state: u8, pub membership_state: u8,
pub permissions: Vec<String>, pub permissions: Vec<String>,

View File

@ -7,7 +7,7 @@ use crate::types::{
}; };
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-template> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-template>
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct GuildTemplate { pub struct GuildTemplate {
pub code: String, pub code: String,

View File

@ -3,7 +3,7 @@ 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;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
pub struct UserData { pub struct UserData {
pub valid_tokens_since: DateTime<Utc>, pub valid_tokens_since: DateTime<Utc>,
@ -15,7 +15,7 @@ impl User {
PublicUser::from(self) PublicUser::from(self)
} }
} }
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[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,
@ -50,7 +50,7 @@ pub struct User {
pub disabled: Option<bool>, pub disabled: Option<bool>,
} }
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct PublicUser { pub struct PublicUser {
pub id: Snowflake, pub id: Snowflake,
pub username: Option<String>, pub username: Option<String>,
@ -91,7 +91,7 @@ impl From<User> for PublicUser {
const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32; const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32;
bitflags::bitflags! { bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
pub struct UserFlags: u64 { pub struct UserFlags: u64 {
const DISCORD_EMPLOYEE = 1 << 0; const DISCORD_EMPLOYEE = 1 << 0;

View File

@ -1,7 +1,7 @@
use chrono::{serde::ts_milliseconds_option, Utc}; use chrono::{serde::ts_milliseconds_option, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[serde(rename_all = "lowercase")] #[serde(rename_all = "lowercase")]
pub enum UserStatus { pub enum UserStatus {
@ -19,7 +19,7 @@ impl std::fmt::Display for UserStatus {
} }
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[serde(rename_all = "lowercase")] #[serde(rename_all = "lowercase")]
pub enum UserTheme { pub enum UserTheme {
@ -28,7 +28,7 @@ pub enum UserTheme {
Light, Light,
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct UserSettings { pub struct UserSettings {
pub afk_timeout: u16, pub afk_timeout: u16,
@ -117,7 +117,7 @@ impl Default for UserSettings {
} }
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct CustomStatus { pub struct CustomStatus {
pub emoji_id: Option<String>, pub emoji_id: Option<String>,
@ -127,7 +127,7 @@ pub struct CustomStatus {
pub text: Option<String>, pub text: Option<String>,
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FriendSourceFlags { pub struct FriendSourceFlags {
pub all: bool, pub all: bool,
} }
@ -138,7 +138,7 @@ impl Default for FriendSourceFlags {
} }
} }
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GuildFolder { pub struct GuildFolder {
pub color: u32, pub color: u32,
pub guild_ids: Vec<String>, pub guild_ids: Vec<String>,

View File

@ -7,7 +7,7 @@ use crate::types::{
}; };
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate>
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct VoiceState { pub struct VoiceState {
pub guild_id: Option<Snowflake>, pub guild_id: Option<Snowflake>,

View File

@ -6,7 +6,7 @@ use crate::types::{
}; };
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook>
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[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,

View File

@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::types::{entities::PermissionOverwrite, Snowflake}; use crate::types::{entities::PermissionOverwrite, Snowflake};
#[derive(Debug, Deserialize, Serialize, Default, PartialEq, PartialOrd)] #[derive(Debug, Deserialize, Serialize, Default)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub struct ChannelCreateSchema { pub struct ChannelCreateSchema {
pub name: String, pub name: String,
@ -27,7 +27,7 @@ pub struct ChannelCreateSchema {
pub video_quality_mode: Option<i32>, pub video_quality_mode: Option<i32>,
} }
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, PartialOrd)] #[derive(Debug, Deserialize, Serialize, Clone, Default)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub struct ChannelModifySchema { pub struct ChannelModifySchema {
pub name: Option<String>, pub name: Option<String>,