impl Hash for Guild
This commit is contained in:
parent
b7ae75f7ce
commit
1340a11a65
|
@ -18,7 +18,7 @@ use crate::types::config::types::subconfigs::guild::{
|
|||
};
|
||||
use crate::types::{Error, GuildError};
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize, Hash)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
pub enum GuildFeatures {
|
||||
ActivitiesAlpha,
|
||||
|
@ -139,7 +139,7 @@ pub enum GuildFeatures {
|
|||
InvitesClosed,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize, Eq, Hash)]
|
||||
pub struct GuildFeaturesList(Vec<GuildFeatures>);
|
||||
|
||||
impl Deref for GuildFeaturesList {
|
||||
|
|
|
@ -35,6 +35,19 @@ pub struct Emoji {
|
|||
pub available: Option<bool>,
|
||||
}
|
||||
|
||||
impl std::hash::Hash for Emoji {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.id.hash(state);
|
||||
self.name.hash(state);
|
||||
self.roles.hash(state);
|
||||
self.roles.hash(state);
|
||||
self.require_colons.hash(state);
|
||||
self.managed.hash(state);
|
||||
self.animated.hash(state);
|
||||
self.available.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Emoji {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
!(self.id != other.id
|
||||
|
|
|
@ -111,8 +111,60 @@ pub struct Guild {
|
|||
pub widget_enabled: Option<bool>,
|
||||
}
|
||||
|
||||
impl std::hash::Hash for Guild {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.afk_channel_id.hash(state);
|
||||
self.afk_timeout.hash(state);
|
||||
self.application_id.hash(state);
|
||||
self.approximate_member_count.hash(state);
|
||||
self.approximate_presence_count.hash(state);
|
||||
self.banner.hash(state);
|
||||
self.bans.hash(state);
|
||||
self.default_message_notifications.hash(state);
|
||||
self.description.hash(state);
|
||||
self.discovery_splash.hash(state);
|
||||
self.explicit_content_filter.hash(state);
|
||||
self.features.hash(state);
|
||||
self.icon.hash(state);
|
||||
self.icon_hash.hash(state);
|
||||
self.id.hash(state);
|
||||
self.invites.hash(state);
|
||||
self.joined_at.hash(state);
|
||||
self.large.hash(state);
|
||||
self.max_members.hash(state);
|
||||
self.max_presences.hash(state);
|
||||
self.max_stage_video_channel_users.hash(state);
|
||||
self.max_video_channel_users.hash(state);
|
||||
self.mfa_level.hash(state);
|
||||
self.name.hash(state);
|
||||
self.nsfw_level.hash(state);
|
||||
self.owner.hash(state);
|
||||
self.owner_id.hash(state);
|
||||
self.permissions.hash(state);
|
||||
self.preferred_locale.hash(state);
|
||||
self.premium_progress_bar_enabled.hash(state);
|
||||
self.premium_subscription_count.hash(state);
|
||||
self.premium_tier.hash(state);
|
||||
self.primary_category_id.hash(state);
|
||||
self.public_updates_channel_id.hash(state);
|
||||
self.region.hash(state);
|
||||
self.rules_channel.hash(state);
|
||||
self.rules_channel_id.hash(state);
|
||||
self.splash.hash(state);
|
||||
self.stickers.hash(state);
|
||||
self.system_channel_flags.hash(state);
|
||||
self.system_channel_id.hash(state);
|
||||
self.vanity_url_code.hash(state);
|
||||
self.verification_level.hash(state);
|
||||
self.welcome_screen.hash(state);
|
||||
self.welcome_screen.hash(state);
|
||||
self.widget_channel_id.hash(state);
|
||||
self.widget_enabled.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
/// 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, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||
pub struct GuildBan {
|
||||
pub user: PublicUser,
|
||||
|
@ -142,7 +194,26 @@ pub struct GuildInvite {
|
|||
pub vanity_url: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||
impl std::hash::Hash for GuildInvite {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.code.hash(state);
|
||||
self.temporary.hash(state);
|
||||
self.uses.hash(state);
|
||||
self.max_uses.hash(state);
|
||||
self.max_age.hash(state);
|
||||
self.created_at.hash(state);
|
||||
self.expires_at.hash(state);
|
||||
self.guild_id.hash(state);
|
||||
self.channel_id.hash(state);
|
||||
self.inviter_id.hash(state);
|
||||
self.target_user_id.hash(state);
|
||||
self.target_user.hash(state);
|
||||
self.target_user_type.hash(state);
|
||||
self.vanity_url.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Hash)]
|
||||
pub struct UnavailableGuild {
|
||||
id: Snowflake,
|
||||
unavailable: bool,
|
||||
|
@ -209,7 +280,7 @@ pub struct GuildScheduledEventEntityMetadata {
|
|||
pub location: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Eq, PartialEq, Hash)]
|
||||
pub struct VoiceRegion {
|
||||
id: String,
|
||||
name: String,
|
||||
|
@ -218,7 +289,7 @@ pub struct VoiceRegion {
|
|||
custom: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#message-notification-level>
|
||||
|
@ -228,7 +299,7 @@ pub enum MessageNotificationLevel {
|
|||
OnlyMentions = 1,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#explicit-content-filter-level>
|
||||
|
@ -239,7 +310,7 @@ pub enum ExplicitContentFilterLevel {
|
|||
AllMembers = 2,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||
|
@ -252,7 +323,7 @@ pub enum VerificationLevel {
|
|||
VeryHigh = 4,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||
|
@ -262,7 +333,7 @@ pub enum MFALevel {
|
|||
Elevated = 1,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||
|
@ -274,7 +345,7 @@ pub enum NSFWLevel {
|
|||
AgeRestricted = 3,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq, Hash, Copy)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||
|
|
|
@ -28,6 +28,22 @@ pub struct Sticker {
|
|||
pub sort_value: Option<u8>,
|
||||
}
|
||||
|
||||
impl std::hash::Hash for Sticker {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.id.hash(state);
|
||||
self.pack_id.hash(state);
|
||||
self.name.hash(state);
|
||||
self.description.hash(state);
|
||||
self.tags.hash(state);
|
||||
self.asset.hash(state);
|
||||
self.sticker_type.hash(state);
|
||||
self.format_type.hash(state);
|
||||
self.available.hash(state);
|
||||
self.guild_id.hash(state);
|
||||
self.sort_value.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Sticker {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.id == other.id
|
||||
|
|
|
@ -27,7 +27,7 @@ impl User {
|
|||
PublicUser::from(self)
|
||||
}
|
||||
}
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "client", derive(Updateable, Composite))]
|
||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||
pub struct User {
|
||||
|
@ -63,7 +63,7 @@ pub struct User {
|
|||
pub disabled: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
|
||||
pub struct PublicUser {
|
||||
pub id: Snowflake,
|
||||
pub username: Option<String>,
|
||||
|
|
|
@ -2,14 +2,14 @@ use serde::{Deserialize, Serialize};
|
|||
|
||||
use crate::types::utils::Snowflake;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Hash)]
|
||||
pub struct WelcomeScreenObject {
|
||||
pub enabled: bool,
|
||||
pub description: Option<String>,
|
||||
pub welcome_channels: Vec<WelcomeScreenChannel>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Hash)]
|
||||
pub struct WelcomeScreenChannel {
|
||||
pub channel_id: Snowflake,
|
||||
pub description: String,
|
||||
|
|
Loading…
Reference in New Issue