diff --git a/src/builder/create_channel.rs b/src/builder/create_channel.rs index 8b478a5f3c3..38b4440bd0d 100644 --- a/src/builder/create_channel.rs +++ b/src/builder/create_channel.rs @@ -27,7 +27,7 @@ pub struct CreateChannel<'a> { #[serde(skip_serializing_if = "Option::is_none")] bitrate: Option, #[serde(skip_serializing_if = "Option::is_none")] - user_limit: Option, + user_limit: Option, #[serde(skip_serializing_if = "Option::is_none")] rate_limit_per_user: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -137,7 +137,7 @@ impl<'a> CreateChannel<'a> { /// Set how many users may occupy this voice channel /// /// Only for [`ChannelType::Voice`] and [`ChannelType::Stage`] - pub fn user_limit(mut self, limit: u32) -> Self { + pub fn user_limit(mut self, limit: NonMaxU16) -> Self { self.user_limit = Some(limit); self } diff --git a/src/builder/edit_channel.rs b/src/builder/edit_channel.rs index a2b15a38cd3..99812bd544f 100644 --- a/src/builder/edit_channel.rs +++ b/src/builder/edit_channel.rs @@ -53,7 +53,7 @@ pub struct EditChannel<'a> { #[serde(skip_serializing_if = "Option::is_none")] bitrate: Option, #[serde(skip_serializing_if = "Option::is_none")] - user_limit: Option, + user_limit: Option, #[serde(skip_serializing_if = "Option::is_none")] permission_overwrites: Option>, #[serde(skip_serializing_if = "Option::is_none")] @@ -169,10 +169,11 @@ impl<'a> EditChannel<'a> { /// The number of users that may be in the channel simultaneously. /// - /// This is for [voice] channels only. + /// This is for [voice] and [stage] channels only. /// /// [voice]: ChannelType::Voice - pub fn user_limit(mut self, user_limit: u32) -> Self { + /// [stage]: ChannelType::Stage + pub fn user_limit(mut self, user_limit: NonMaxU16) -> Self { self.user_limit = Some(user_limit); self } diff --git a/src/gateway/ws.rs b/src/gateway/ws.rs index 4b4c104d8bd..d727d9c0a1a 100644 --- a/src/gateway/ws.rs +++ b/src/gateway/ws.rs @@ -134,13 +134,14 @@ impl WsClient { from_str(&decompressed).map_err(|why| { warn!("Err deserializing bytes: {why:?}"); - debug!("Failing bytes: {bytes:?}"); + debug!("Failing text: {decompressed}"); why })? }, Message::Text(payload) => from_str(&payload).map_err(|why| { - warn!("Err deserializing text: {why:?}; text: {payload}"); + warn!("Err deserializing text: {why:?}"); + debug!("Failing text: {payload}"); why })?, diff --git a/src/model/channel/guild_channel.rs b/src/model/channel/guild_channel.rs index b372f9b17a1..1f9ac492abe 100644 --- a/src/model/channel/guild_channel.rs +++ b/src/model/channel/guild_channel.rs @@ -92,8 +92,8 @@ pub struct GuildChannel { pub topic: Option>, /// The maximum number of members allowed in the channel. /// - /// **Note**: This is only available for voice channels. - pub user_limit: Option, + /// This is max 99 for voice channels and 10,000 for stage channels (0 refers to no limit). + pub user_limit: Option, /// Used to tell if the channel is not safe for work. // This field can or can not be present sometimes, but if it isn't default to `false`. #[serde(default)] diff --git a/src/model/guild/audit_log/change.rs b/src/model/guild/audit_log/change.rs index e0c9f27a61e..e7b6d7f1689 100644 --- a/src/model/guild/audit_log/change.rs +++ b/src/model/guild/audit_log/change.rs @@ -1,3 +1,5 @@ +use nonmax::NonMaxU16; + use crate::internal::prelude::*; use crate::json::Value; use crate::model::channel::PermissionOverwrite; @@ -257,7 +259,7 @@ generate_change! { /// Unicode emoji of a role icon was changed. "unicode_emoji" => UnicodeEmoji(FixedString), /// Maximum number of users in a voice channel was changed. - "user_limit" => UserLimit(u64), + "user_limit" => UserLimit(NonMaxU16), /// Number of uses of an invite was changed. "uses" => Uses(u64), /// Guild invite vanity url was changed. diff --git a/src/model/utils.rs b/src/model/utils.rs index a97d28881c3..ea778e28ac2 100644 --- a/src/model/utils.rs +++ b/src/model/utils.rs @@ -154,26 +154,7 @@ pub mod emojis { pub fn deserialize_guild_channels<'de, D: Deserializer<'de>>( deserializer: D, ) -> StdResult, D::Error> { - struct TryDeserialize(StdResult); - impl<'de, T: Deserialize<'de>> Deserialize<'de> for TryDeserialize { - fn deserialize>(deserializer: D) -> StdResult { - Ok(Self(T::deserialize(deserializer).map_err(|e| e.to_string()))) - } - } - - let vec: Vec> = Deserialize::deserialize(deserializer)?; - let mut map = HashMap::new(); - - for channel in vec { - match channel.0 { - Ok(channel) => { - map.insert(channel.id, channel); - }, - Err(e) => tracing::warn!("skipping guild channel due to deserialization error: {}", e), - } - } - - Ok(map) + deserializer.deserialize_seq(SequenceToMapVisitor::new(|channel: &GuildChannel| channel.id)) } /// Used with `#[serde(with = "members")]