diff --git a/src/constants.rs b/src/constants.rs index b3d8105a08b..86a9d925cf6 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -40,7 +40,6 @@ enum_number! { /// /// [Discord docs](https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum Opcode { /// Dispatches an event. diff --git a/src/internal/macros.rs b/src/internal/macros.rs index 5fac24d79f4..c683c2d992b 100644 --- a/src/internal/macros.rs +++ b/src/internal/macros.rs @@ -86,43 +86,39 @@ macro_rules! status { macro_rules! enum_number { ( $(#[$outer:meta])* + $(#[ = $default:literal])? $vis:vis enum $Enum:ident { $( $(#[doc = $doc:literal])* $(#[cfg $($cfg:tt)*])? - $(#[default $($dummy:tt)?])? $Variant:ident = $value:literal, )* _ => Unknown($T:ty), } ) => { $(#[$outer])* - $vis enum $Enum { + $vis struct $Enum (pub $T); + + $( + impl Default for $Enum { + fn default() -> Self { + Self($default) + } + } + )? + + #[allow(non_snake_case, non_upper_case_globals)] + impl $Enum { $( $(#[doc = $doc])* $(#[cfg $($cfg)*])? - $(#[default $($dummy:tt)?])? - $Variant, + $vis const $Variant: Self = Self($value); )* - /// Variant value is unknown. - Unknown($T), - } - impl From<$T> for $Enum { - fn from(value: $T) -> Self { - match value { - $($(#[cfg $($cfg)*])? $value => Self::$Variant,)* - unknown => Self::Unknown(unknown), - } - } - } - - impl From<$Enum> for $T { - fn from(value: $Enum) -> Self { - match value { - $($(#[cfg $($cfg)*])? $Enum::$Variant => $value,)* - $Enum::Unknown(unknown) => unknown, - } + /// Variant value is unknown. + #[must_use] + $vis const fn Unknown(val: $T) -> Self { + Self(val) } } }; @@ -184,7 +180,6 @@ mod tests { fn enum_number() { enum_number! { #[derive(Copy, Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] pub enum T { /// AAA A = 1, diff --git a/src/model/application/command.rs b/src/model/application/command.rs index 66cfabe38ab..01c8be0816e 100644 --- a/src/model/application/command.rs +++ b/src/model/application/command.rs @@ -229,7 +229,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum CommandType { ChatInput = 1, @@ -305,7 +304,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum CommandOptionType { SubCommand = 1, @@ -378,7 +376,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum CommandPermissionType { Role = 1, diff --git a/src/model/application/command_interaction.rs b/src/model/application/command_interaction.rs index 35492ca6c93..1e9acb32958 100644 --- a/src/model/application/command_interaction.rs +++ b/src/model/application/command_interaction.rs @@ -577,7 +577,7 @@ fn option_from_raw(raw: RawCommandDataOption) -> Result { CommandOptionType::Mentionable => CommandDataOptionValue::Mentionable(value!()), CommandOptionType::Role => CommandDataOptionValue::Role(value!()), CommandOptionType::User => CommandDataOptionValue::User(value!()), - CommandOptionType::Unknown(unknown) => CommandDataOptionValue::Unknown(unknown), + CommandOptionType(unknown) => CommandDataOptionValue::Unknown(unknown), }; Ok(CommandDataOption { diff --git a/src/model/application/component.rs b/src/model/application/component.rs index c7965d6c217..2c907d07219 100644 --- a/src/model/application/component.rs +++ b/src/model/application/component.rs @@ -10,7 +10,6 @@ enum_number! { /// The type of a component #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ComponentType { ActionRow = 1, @@ -70,7 +69,7 @@ impl<'de> Deserialize<'de> for ActionRowComponent { ComponentType::ActionRow => { return Err(DeError::custom("Invalid component type ActionRow")) }, - ComponentType::Unknown(i) => { + ComponentType(i) => { return Err(DeError::custom(format_args!("Unknown component type {i}"))) }, } @@ -146,7 +145,7 @@ impl Serialize for ButtonKind { custom_id, style, } => Helper { - style: (*style).into(), + style: style.0, url: None, custom_id: Some(custom_id), sku_id: None, @@ -184,7 +183,6 @@ enum_number! { /// The style of a button. #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ButtonStyle { Primary = 1, @@ -298,7 +296,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum InputTextStyle { Short = 1, diff --git a/src/model/application/component_interaction.rs b/src/model/application/component_interaction.rs index 3e2e9fa4a08..63cca13c52c 100644 --- a/src/model/application/component_interaction.rs +++ b/src/model/application/component_interaction.rs @@ -286,12 +286,12 @@ impl<'de> Deserialize<'de> for ComponentInteractionDataKind { ComponentType::ChannelSelect => Self::ChannelSelect { values: parse_values!(), }, - ComponentType::Unknown(x) => Self::Unknown(x), x @ (ComponentType::ActionRow | ComponentType::InputText) => { return Err(D::Error::custom(format_args!( "invalid message component type in this context: {x:?}", ))); }, + ComponentType(x) => Self::Unknown(x), }) } } diff --git a/src/model/application/interaction.rs b/src/model/application/interaction.rs index 150a6a80040..94583d966c4 100644 --- a/src/model/application/interaction.rs +++ b/src/model/application/interaction.rs @@ -243,7 +243,7 @@ impl<'de> Deserialize<'de> for Interaction { InteractionType::Autocomplete => from_value(value).map(Interaction::Autocomplete), InteractionType::Modal => from_value(value).map(Interaction::Modal), InteractionType::Ping => from_value(value).map(Interaction::Ping), - InteractionType::Unknown(_) => return Err(DeError::custom("Unknown interaction type")), + InteractionType(_) => return Err(DeError::custom("Unknown interaction type")), } .map_err(DeError::custom) } @@ -266,7 +266,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum InteractionType { Ping = 1, @@ -339,7 +338,7 @@ impl<'de> serde::Deserialize<'de> for AuthorizingIntegrationOwners { let mut out = Vec::new(); while let Some(key_str) = map.next_key::>()? { let key_int = key_str.0.parse::().map_err(serde::de::Error::custom)?; - let value = match InstallationContext::from(key_int) { + let value = match InstallationContext(key_int) { InstallationContext::Guild => { // GuildId here can be `0`, which signals the command is guild installed // but invoked in a DM, we have to do this fun deserialisation dance. diff --git a/src/model/application/mod.rs b/src/model/application/mod.rs index 7f8861cc675..0eb1f15909d 100644 --- a/src/model/application/mod.rs +++ b/src/model/application/mod.rs @@ -107,7 +107,6 @@ enum_number! { /// [interaction contexts](https://discord.com/developers/docs/resources/application#application-object-application-integration-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum InstallationContext { Guild = 0, @@ -123,7 +122,6 @@ enum_number! { /// [interaction contexts](https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-context-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum InteractionContext { /// Interaction can be used within servers @@ -187,7 +185,6 @@ pub struct TeamMember { enum_number! { /// [Discord docs](https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum MembershipState { Invited = 1, diff --git a/src/model/channel/guild_channel.rs b/src/model/channel/guild_channel.rs index ad51a801579..fbfd64df6ec 100644 --- a/src/model/channel/guild_channel.rs +++ b/src/model/channel/guild_channel.rs @@ -180,11 +180,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#channel-object-forum-layout-types). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ForumLayoutType { /// No default has been set for forum channel. - #[default] NotSet = 0, /// Display posts as a list. ListView = 1, diff --git a/src/model/channel/message.rs b/src/model/channel/message.rs index d87d726756a..cb249626d2c 100644 --- a/src/model/channel/message.rs +++ b/src/model/channel/message.rs @@ -959,11 +959,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#message-object-message-types). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum MessageType { /// A regular message. - #[default] Regular = 0, /// An indicator that a recipient was added by the author. GroupRecipientAddition = 1, @@ -1030,7 +1028,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#message-object-message-activity-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum MessageActivityKind { Join = 1, @@ -1328,12 +1325,11 @@ enum_number! { /// Currently, there is only the one option. /// /// [Discord docs](https://discord.com/developers/docs/resources/poll#layout-type) - #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] + #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] + #[ = 1] pub enum PollLayoutType { - #[default] Default = 1, _ => Unknown(u8), } diff --git a/src/model/channel/mod.rs b/src/model/channel/mod.rs index 49dc5f801fa..365bc0cbc4b 100644 --- a/src/model/channel/mod.rs +++ b/src/model/channel/mod.rs @@ -213,11 +213,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#channel-object-channel-types). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ChannelType { /// An indicator that the channel is a text [`GuildChannel`]. - #[default] Text = 0, /// An indicator that the channel is a [`PrivateChannel`]. Private = 1, @@ -251,8 +249,8 @@ enum_number! { impl ChannelType { #[must_use] - pub const fn name(&self) -> &str { - match *self { + pub const fn name(self) -> &'static str { + match self { Self::Private => "private", Self::Text => "text", Self::Voice => "voice", @@ -265,7 +263,7 @@ impl ChannelType { Self::Stage => "stage", Self::Directory => "directory", Self::Forum => "forum", - Self::Unknown(_) => "unknown", + Self(_) => "unknown", } } } @@ -358,7 +356,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum VideoQualityMode { /// An indicator that the video quality is chosen by Discord for optimal @@ -374,15 +371,14 @@ enum_number! { /// See [`StageInstance::privacy_level`]. /// /// [Discord docs](https://discord.com/developers/docs/resources/stage-instance#stage-instance-object-privacy-level). - #[derive(Clone, Copy, Default, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Deserialize, Serialize)] + #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] + #[ = 2] pub enum StageInstancePrivacyLevel { /// The Stage instance is visible publicly. (deprecated) Public = 1, /// The Stage instance is visible to only guild members. - #[default] GuildOnly = 2, _ => Unknown(u8), } @@ -394,7 +390,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#thread-metadata-object) #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u16", into = "u16")] #[non_exhaustive] pub enum AutoArchiveDuration { None = 0, @@ -555,7 +550,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/channel#channel-object-sort-order-types). #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum SortOrder { /// Sort forum posts by activity. diff --git a/src/model/channel/reaction.rs b/src/model/channel/reaction.rs index 6ed74f720e7..84b3d1eb35c 100644 --- a/src/model/channel/reaction.rs +++ b/src/model/channel/reaction.rs @@ -63,7 +63,6 @@ enum_number! { /// A list of types a reaction can be. #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ReactionTypes { Normal = 0, diff --git a/src/model/connection.rs b/src/model/connection.rs index fcba6e0f186..c47d1f0cbd5 100644 --- a/src/model/connection.rs +++ b/src/model/connection.rs @@ -42,7 +42,6 @@ enum_number! { /// /// [Discord docs](https://discord.com/developers/docs/resources/user#connection-object-visibility-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ConnectionVisibility { /// Invisible to everyone except the user themselves diff --git a/src/model/gateway.rs b/src/model/gateway.rs index 308fbe1c57e..88bda3a6f5b 100644 --- a/src/model/gateway.rs +++ b/src/model/gateway.rs @@ -187,11 +187,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-types). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ActivityType { /// An indicator that the user is playing a game. - #[default] Playing = 0, /// An indicator that the user is streaming to a service. Streaming = 1, diff --git a/src/model/guild/automod.rs b/src/model/guild/automod.rs index 89331a84845..f81defe6bc4 100644 --- a/src/model/guild/automod.rs +++ b/src/model/guild/automod.rs @@ -438,7 +438,7 @@ impl<'de> Deserialize<'de> for Action { .duration_seconds .ok_or_else(|| Error::missing_field("duration_seconds"))?, )), - ActionType::Unknown(unknown) => Action::Unknown(unknown), + ActionType(unknown) => Action::Unknown(unknown), }) } } @@ -497,7 +497,6 @@ enum_number! { /// /// [Discord docs](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ActionType { BlockMessage = 1, diff --git a/src/model/guild/integration.rs b/src/model/guild/integration.rs index 039680119fb..256854928a8 100644 --- a/src/model/guild/integration.rs +++ b/src/model/guild/integration.rs @@ -42,7 +42,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum IntegrationExpireBehaviour { RemoveRole = 0, diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs index ffb4bf3c0db..fe50c280459 100644 --- a/src/model/guild/mod.rs +++ b/src/model/guild/mod.rs @@ -2480,11 +2480,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum DefaultMessageNotificationLevel { /// Receive notifications for everything. - #[default] All = 0, /// Receive only mentions. Mentions = 1, @@ -2498,11 +2496,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ExplicitContentFilter { /// Don't scan any messages. - #[default] None = 0, /// Scan messages from members without a role. WithoutRole = 1, @@ -2518,11 +2514,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-mfa-level). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum MfaLevel { /// MFA is disabled. - #[default] None = 0, /// MFA is enabled. Elevated = 1, @@ -2537,11 +2531,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-verification-level). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum VerificationLevel { /// Does not require any verification. - #[default] None = 0, /// Must have a verified email on the user's Discord account. Low = 1, @@ -2561,11 +2553,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum NsfwLevel { /// The nsfw level is not specified. - #[default] Default = 0, /// The guild is considered as explicit. Explicit = 1, @@ -2583,7 +2573,6 @@ enum_number! { /// See [AfkMetadata::afk_timeout]. #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u16", into = "u16")] #[non_exhaustive] pub enum AfkTimeout { OneMinute = 60, diff --git a/src/model/guild/premium_tier.rs b/src/model/guild/premium_tier.rs index cf749dcee44..367d2fae8d2 100644 --- a/src/model/guild/premium_tier.rs +++ b/src/model/guild/premium_tier.rs @@ -4,11 +4,9 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild#guild-object-premium-tier). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum PremiumTier { /// Guild has not unlocked any Server Boost perks - #[default] Tier0 = 0, /// Guild has unlocked Server Boost level 1 perks Tier1 = 1, diff --git a/src/model/guild/scheduled_event.rs b/src/model/guild/scheduled_event.rs index 99b8f3a7289..6aa978df765 100644 --- a/src/model/guild/scheduled_event.rs +++ b/src/model/guild/scheduled_event.rs @@ -60,7 +60,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ScheduledEventStatus { Scheduled = 1, @@ -75,7 +74,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ScheduledEventType { StageInstance = 1, @@ -111,7 +109,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum ScheduledEventPrivacyLevel { GuildOnly = 2, diff --git a/src/model/invite.rs b/src/model/invite.rs index 5996da2ee83..2934be3946f 100644 --- a/src/model/invite.rs +++ b/src/model/invite.rs @@ -406,7 +406,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/invite#invite-object-invite-target-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum InviteTargetType { Stream = 1, diff --git a/src/model/monetization.rs b/src/model/monetization.rs index cbe8d01f1d7..916d56aad5c 100644 --- a/src/model/monetization.rs +++ b/src/model/monetization.rs @@ -43,7 +43,6 @@ enum_number! { /// /// [Discord docs](https://discord.com/developers/docs/monetization/skus#sku-object-sku-types). #[derive(Clone, Debug, Serialize, Deserialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum SkuKind { /// Represents a recurring subscription. @@ -127,7 +126,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/monetization/entitlements#entitlement-object-entitlement-types). #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] #[derive(Clone, Debug, Serialize, Deserialize)] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum EntitlementKind { /// Entitlement was purchased as an app subscription. diff --git a/src/model/sticker.rs b/src/model/sticker.rs index cbef322dd31..8fafb8294d8 100644 --- a/src/model/sticker.rs +++ b/src/model/sticker.rs @@ -227,7 +227,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum StickerType { /// An official sticker in a pack, part of Nitro or in a removed purchasable pack. @@ -244,7 +243,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum StickerFormatType { /// A PNG format sticker. @@ -265,7 +263,7 @@ fn sticker_url(sticker_id: StickerId, sticker_format_type: StickerFormatType) -> StickerFormatType::Png | StickerFormatType::Apng => "png", StickerFormatType::Lottie => "json", StickerFormatType::Gif => "gif", - StickerFormatType::Unknown(_) => return None, + StickerFormatType(_) => return None, }; Some(cdn!("/stickers/{}.{}", sticker_id, ext)) diff --git a/src/model/user.rs b/src/model/user.rs index 06e9a8d87d9..28cec2a4ff8 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -297,10 +297,8 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/user#user-object-premium-types). #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum PremiumType { - #[default] None = 0, NitroClassic = 1, Nitro = 2, diff --git a/src/model/webhook.rs b/src/model/webhook.rs index 91b7780b72c..f2630487eda 100644 --- a/src/model/webhook.rs +++ b/src/model/webhook.rs @@ -20,7 +20,6 @@ enum_number! { /// [Discord docs](https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types). #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)] #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))] - #[serde(from = "u8", into = "u8")] #[non_exhaustive] pub enum WebhookType { /// An indicator that the webhook can post messages to channels with a token. @@ -36,12 +35,12 @@ enum_number! { impl WebhookType { #[must_use] - pub fn name(&self) -> &str { + pub fn name(self) -> &'static str { match self { Self::Incoming => "incoming", Self::ChannelFollower => "channel follower", Self::Application => "application", - Self::Unknown(_) => "unknown", + _ => "unknown", } } }