push: Allow to deserialize Ruleset with missing fields

According to the Matrix Specification, no field is required.
This commit is contained in:
Kévin Commaille 2023-12-26 15:34:34 +01:00 committed by Kévin Commaille
parent 4ae2455f80
commit 00f8a6743b
2 changed files with 9 additions and 1 deletions

View File

@ -1,5 +1,9 @@
# [unreleased] # [unreleased]
Bug fixes:
- Allow to deserialize `Ruleset` with missing fields.
Breaking changes: Breaking changes:
- The power levels fields in `PushConditionRoomCtx` are grouped in an optional `power_levels` field. - The power levels fields in `PushConditionRoomCtx` are grouped in an optional `power_levels` field.
If the field is missing, push rules that depend on it will never match. However, this allows to If the field is missing, push rules that depend on it will never match. However, this allows to

View File

@ -57,23 +57,27 @@ pub use self::{
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct Ruleset { pub struct Ruleset {
/// These rules configure behavior for (unencrypted) messages that match certain patterns. /// These rules configure behavior for (unencrypted) messages that match certain patterns.
#[serde(default, skip_serializing_if = "IndexSet::is_empty")]
pub content: IndexSet<PatternedPushRule>, pub content: IndexSet<PatternedPushRule>,
/// These user-configured rules are given the highest priority. /// These user-configured rules are given the highest priority.
/// ///
/// This field is named `override_` instead of `override` because the latter is a reserved /// This field is named `override_` instead of `override` because the latter is a reserved
/// keyword in Rust. /// keyword in Rust.
#[serde(rename = "override")] #[serde(rename = "override", default, skip_serializing_if = "IndexSet::is_empty")]
pub override_: IndexSet<ConditionalPushRule>, pub override_: IndexSet<ConditionalPushRule>,
/// These rules change the behavior of all messages for a given room. /// These rules change the behavior of all messages for a given room.
#[serde(default, skip_serializing_if = "IndexSet::is_empty")]
pub room: IndexSet<SimplePushRule<OwnedRoomId>>, pub room: IndexSet<SimplePushRule<OwnedRoomId>>,
/// These rules configure notification behavior for messages from a specific Matrix user ID. /// These rules configure notification behavior for messages from a specific Matrix user ID.
#[serde(default, skip_serializing_if = "IndexSet::is_empty")]
pub sender: IndexSet<SimplePushRule<OwnedUserId>>, pub sender: IndexSet<SimplePushRule<OwnedUserId>>,
/// These rules are identical to override rules, but have a lower priority than `content`, /// These rules are identical to override rules, but have a lower priority than `content`,
/// `room` and `sender` rules. /// `room` and `sender` rules.
#[serde(default, skip_serializing_if = "IndexSet::is_empty")]
pub underride: IndexSet<ConditionalPushRule>, pub underride: IndexSet<ConditionalPushRule>,
} }