diff --git a/ruma-events/src/room/power_levels.rs b/ruma-events/src/room/power_levels.rs index a98bd0f9..d0d60123 100644 --- a/ruma-events/src/room/power_levels.rs +++ b/ruma-events/src/room/power_levels.rs @@ -17,6 +17,10 @@ pub type PowerLevelsEvent = StateEvent; #[ruma_event(type = "m.room.power_levels")] pub struct PowerLevelsEventContent { /// The level required to ban a user. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level", skip_serializing_if = "is_default_power_level")] #[ruma_event(skip_redaction)] pub ban: Int, @@ -24,30 +28,54 @@ pub struct PowerLevelsEventContent { /// The level required to send specific event types. /// /// This is a mapping from event type to power level required. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::btreemap_int_or_string_to_int_values") + )] #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] #[ruma_event(skip_redaction)] pub events: BTreeMap, /// The default level required to send message events. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default, skip_serializing_if = "ruma_serde::is_default")] #[ruma_event(skip_redaction)] pub events_default: Int, /// The level required to invite a user. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level", skip_serializing_if = "is_default_power_level")] pub invite: Int, /// The level required to kick a user. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level", skip_serializing_if = "is_default_power_level")] #[ruma_event(skip_redaction)] pub kick: Int, /// The level required to redact an event. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level", skip_serializing_if = "is_default_power_level")] #[ruma_event(skip_redaction)] pub redact: Int, /// The default level required to send state events. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level", skip_serializing_if = "is_default_power_level")] #[ruma_event(skip_redaction)] pub state_default: Int, @@ -55,11 +83,19 @@ pub struct PowerLevelsEventContent { /// The power levels for specific users. /// /// This is a mapping from `user_id` to power level for that user. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::btreemap_int_or_string_to_int_values") + )] #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] #[ruma_event(skip_redaction)] pub users: BTreeMap, /// The default power level for every user in the room. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default, skip_serializing_if = "ruma_serde::is_default")] #[ruma_event(skip_redaction)] pub users_default: Int, @@ -94,6 +130,10 @@ impl Default for PowerLevelsEventContent { #[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)] pub struct NotificationPowerLevels { /// The level required to trigger an `@room` notification. + #[cfg_attr( + feature = "unstable-synapse-quirks", + serde(deserialize_with = "ruma_serde::int_or_string_to_int") + )] #[serde(default = "default_power_level")] pub room: Int, }