From d89975819a08fd4304e9b25b8d7a10c32405531b Mon Sep 17 00:00:00 2001 From: Quat3rnion Date: Fri, 7 Jun 2024 13:13:03 -0400 Subject: [PATCH] Utilize new macros and use distinct Flag types --- src/types/entities/application.rs | 11 +++------ src/types/entities/guild.rs | 3 ++- src/types/entities/guild_member.rs | 4 ++-- src/types/entities/message.rs | 38 +++++++++++++++++++++++++++++- src/types/entities/role.rs | 1 + src/types/entities/user.rs | 4 ++-- src/types/schema/channel.rs | 24 +------------------ src/types/schema/guild.rs | 1 + src/types/schema/message.rs | 4 ++-- 9 files changed, 51 insertions(+), 39 deletions(-) diff --git a/src/types/entities/application.rs b/src/types/entities/application.rs index c772788..f57a71f 100644 --- a/src/types/entities/application.rs +++ b/src/types/entities/application.rs @@ -31,7 +31,7 @@ pub struct Application { pub verify_key: String, #[cfg_attr(feature = "sqlx", sqlx(skip))] pub owner: Shared, - pub flags: u64, + pub flags: ApplicationFlags, #[cfg(feature = "sqlx")] pub redirect_uris: Option>>, #[cfg(not(feature = "sqlx"))] @@ -73,7 +73,7 @@ impl Default for Application { bot_require_code_grant: false, verify_key: "".to_string(), owner: Default::default(), - flags: 0, + flags: ApplicationFlags::empty(), redirect_uris: None, rpc_application_state: 0, store_application_state: 1, @@ -93,12 +93,6 @@ impl Default for Application { } } -impl Application { - pub fn flags(&self) -> ApplicationFlags { - ApplicationFlags::from_bits(self.flags.to_owned()).unwrap() - } -} - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] /// # Reference /// See @@ -109,6 +103,7 @@ pub struct InstallParams { bitflags! { #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] /// # Reference /// See pub struct ApplicationFlags: u64 { diff --git a/src/types/entities/guild.rs b/src/types/entities/guild.rs index 66b9335..b8fd0a4 100644 --- a/src/types/entities/guild.rs +++ b/src/types/entities/guild.rs @@ -99,7 +99,7 @@ pub struct Guild { pub splash: Option, #[cfg_attr(feature = "sqlx", sqlx(skip))] pub stickers: Option>, - pub system_channel_flags: Option, + pub system_channel_flags: Option, pub system_channel_id: Option, #[cfg_attr(feature = "sqlx", sqlx(skip))] pub vanity_url_code: Option, @@ -423,6 +423,7 @@ pub enum PremiumTier { bitflags! { #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] /// # Reference /// See pub struct SystemChannelFlags: u64 { diff --git a/src/types/entities/guild_member.rs b/src/types/entities/guild_member.rs index df07583..522824c 100644 --- a/src/types/entities/guild_member.rs +++ b/src/types/entities/guild_member.rs @@ -5,7 +5,7 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use crate::types::Shared; +use crate::types::{GuildMemberFlags, Shared}; use crate::types::{entities::PublicUser, Snowflake}; #[derive(Debug, Deserialize, Default, Serialize, Clone)] @@ -25,7 +25,7 @@ pub struct GuildMember { pub premium_since: Option>, pub deaf: bool, pub mute: bool, - pub flags: Option, + pub flags: Option, pub pending: Option, pub permissions: Option, pub communication_disabled_until: Option>, diff --git a/src/types/entities/message.rs b/src/types/entities/message.rs index 9159c58..a6d91e7 100644 --- a/src/types/entities/message.rs +++ b/src/types/entities/message.rs @@ -2,6 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. +use bitflags::bitflags; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; @@ -62,7 +63,7 @@ pub struct Message { pub message_reference: Option>, #[cfg(not(feature = "sqlx"))] pub message_reference: Option, - pub flags: Option, + pub flags: Option, #[cfg_attr(feature = "sqlx", sqlx(skip))] pub referenced_message: Option>, #[cfg_attr(feature = "sqlx", sqlx(skip))] @@ -260,3 +261,38 @@ pub struct MessageActivity { pub activity_type: i64, pub party_id: Option, } + +bitflags! { + #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] + /// # Reference + /// See + pub struct MessageFlags: u64 { + /// This message has been published to subscribed channels (via Channel Following) + const CROSSPOSTED = 1 << 0; + /// This message originated from a message in another channel (via Channel Following) + const IS_CROSSPOST = 1 << 1; + /// Embeds will not be included when serializing this message + const SUPPRESS_EMBEDS = 1 << 2; + /// The source message for this crosspost has been deleted (via Channel Following) + const SOURCE_MESSAGE_DELETED = 1 << 3; + /// This message came from the urgent message system + const URGENT = 1 << 4; + /// This message has an associated thread, with the same ID as the message + const HAS_THREAD = 1 << 5; + /// This message is only visible to the user who invoked the interaction + const EPHEMERAL = 1 << 6; + /// This message is an interaction response and the bot is "thinking" + const LOADING = 1 << 7; + /// Some roles were not mentioned and added to the thread + const FAILED_TO_MENTION_SOME_ROLES_IN_THREAD = 1 << 8; + /// This message contains a link that impersonates Discord + const SHOULD_SHOW_LINK_NOT_DISCORD_WARNING = 1 << 10; + /// This message will not trigger push and desktop notifications + const SUPPRESS_NOTIFICATIONS = 1 << 12; + /// This message's audio attachments are rendered as voice messages + const VOICE_MESSAGE = 1 << 13; + /// This message has a forwarded message snapshot attached + const HAS_SNAPSHOT = 1 << 14; + } +} \ No newline at end of file diff --git a/src/types/entities/role.rs b/src/types/entities/role.rs index 1b5e91e..712c9ab 100644 --- a/src/types/entities/role.rs +++ b/src/types/entities/role.rs @@ -72,6 +72,7 @@ pub struct RoleTags { bitflags! { #[derive(Debug, Default, Clone, Hash, Serialize, Deserialize, PartialEq, Eq)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] /// Permissions limit what users of certain roles can do on a Guild to Guild basis. /// /// # Reference: diff --git a/src/types/entities/user.rs b/src/types/entities/user.rs index 66fbab8..1577479 100644 --- a/src/types/entities/user.rs +++ b/src/types/entities/user.rs @@ -54,7 +54,7 @@ pub struct User { /// So we need to account for that #[serde(default)] #[serde(deserialize_with = "deserialize_option_number_from_string")] - pub flags: Option, + pub flags: Option, pub premium_since: Option>, pub premium_type: Option, pub pronouns: Option, @@ -112,7 +112,7 @@ const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32; bitflags::bitflags! { #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] - #[cfg_attr(feature = "sqlx", derive(sqlx::Type))] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] pub struct UserFlags: u64 { const DISCORD_EMPLOYEE = 1 << 0; const PARTNERED_SERVER_OWNER = 1 << 1; diff --git a/src/types/schema/channel.rs b/src/types/schema/channel.rs index 260b10e..fc2eea6 100644 --- a/src/types/schema/channel.rs +++ b/src/types/schema/channel.rs @@ -132,6 +132,7 @@ impl Default for CreateChannelInviteSchema { bitflags! { #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] pub struct InviteFlags: u64 { const GUEST = 1 << 0; const VIEWED = 1 << 1; @@ -165,29 +166,6 @@ impl<'de> Deserialize<'de> for InviteFlags { } } -#[cfg(feature = "sqlx")] -impl sqlx::Type for InviteFlags { - fn type_info() -> sqlx::mysql::MySqlTypeInfo { - u64::type_info() - } -} - -#[cfg(feature = "sqlx")] -impl<'q> sqlx::Encode<'q, sqlx::MySql> for InviteFlags { - fn encode_by_ref(&self, buf: &mut >::ArgumentBuffer) -> sqlx::encode::IsNull { - u64::encode_by_ref(&self.0.0, buf) - } -} - -#[cfg(feature = "sqlx")] -impl<'r> sqlx::Decode<'r, sqlx::MySql> for InviteFlags { - fn decode(value: >::ValueRef) -> Result { - let raw = u64::decode(value)?; - - Ok(Self::from_bits(raw).unwrap()) - } -} - #[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialOrd, Ord, PartialEq, Eq)] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[serde(rename_all = "SCREAMING_SNAKE_CASE")] diff --git a/src/types/schema/guild.rs b/src/types/schema/guild.rs index 2e29ce0..d820cd8 100644 --- a/src/types/schema/guild.rs +++ b/src/types/schema/guild.rs @@ -132,6 +132,7 @@ pub struct ModifyGuildMemberSchema { bitflags! { #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Ord)] + #[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))] /// Represents the flags of a Guild Member. /// /// # Reference: diff --git a/src/types/schema/message.rs b/src/types/schema/message.rs index 7551b6b..d6b8cc7 100644 --- a/src/types/schema/message.rs +++ b/src/types/schema/message.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use crate::types::entities::{ AllowedMention, Component, Embed, MessageReference, PartialDiscordFileAttachment, }; -use crate::types::{Attachment, Snowflake}; +use crate::types::{Attachment, MessageFlags, Snowflake}; #[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq)] #[serde(rename_all = "snake_case")] @@ -123,7 +123,7 @@ pub struct MessageModifySchema { embed: Option, allowed_mentions: Option, components: Option>, - flags: Option, + flags: Option, files: Option>, payload_json: Option, attachments: Option>,