//! Newtypes around Discord IDs for library cross-compatibility. #[cfg(feature = "driver-core")] use crate::model::id::{GuildId as DriverGuild, UserId as DriverUser}; #[cfg(feature = "serenity")] use serenity::model::id::{ ChannelId as SerenityChannel, GuildId as SerenityGuild, UserId as SerenityUser, }; use std::fmt::{Display, Formatter, Result as FmtResult}; #[cfg(feature = "twilight")] use twilight_model::id::{ ChannelId as TwilightChannel, GuildId as TwilightGuild, UserId as TwilightUser, }; /// ID of a Discord voice/text channel. #[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)] pub struct ChannelId(pub u64); /// ID of a Discord guild (colloquially, "server"). #[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)] pub struct GuildId(pub u64); /// ID of a Discord user. #[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)] pub struct UserId(pub u64); impl Display for ChannelId { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { Display::fmt(&self.0, f) } } impl From for ChannelId { fn from(id: u64) -> Self { Self(id) } } #[cfg(feature = "serenity")] impl From for ChannelId { fn from(id: SerenityChannel) -> Self { Self(id.0) } } #[cfg(feature = "twilight")] impl From for ChannelId { fn from(id: TwilightChannel) -> Self { Self(id.0) } } impl Display for GuildId { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { Display::fmt(&self.0, f) } } impl From for GuildId { fn from(id: u64) -> Self { Self(id) } } #[cfg(feature = "serenity")] impl From for GuildId { fn from(id: SerenityGuild) -> Self { Self(id.0) } } #[cfg(feature = "driver-core")] impl From for DriverGuild { fn from(id: GuildId) -> Self { Self(id.0) } } #[cfg(feature = "twilight")] impl From for GuildId { fn from(id: TwilightGuild) -> Self { Self(id.0) } } impl Display for UserId { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { Display::fmt(&self.0, f) } } impl From for UserId { fn from(id: u64) -> Self { Self(id) } } #[cfg(feature = "serenity")] impl From for UserId { fn from(id: SerenityUser) -> Self { Self(id.0) } } #[cfg(feature = "driver-core")] impl From for DriverUser { fn from(id: UserId) -> Self { Self(id.0) } } #[cfg(feature = "twilight")] impl From for UserId { fn from(id: TwilightUser) -> Self { Self(id.0) } }