common: Add Ruleset::get_match
This commit is contained in:
parent
c4e918cfc4
commit
32398d187b
@ -11,6 +11,9 @@ Improvements:
|
||||
* Add `push::Ruleset::iter()` for borrowing iteration of rulesets
|
||||
* Add conversions between `AnyPushRule` and `AnyPushRuleRef`
|
||||
(`AnyPushRule::as_ref` and `AnyPushRuleRef::to_owned`)
|
||||
* Add `push::Ruleset::get_match()` for finding the first matching push rule for
|
||||
an event. This is pretty much the same thing as `get_actions()` but returns
|
||||
the entire push rule, not just its actions.
|
||||
|
||||
# 0.4.0
|
||||
|
||||
|
@ -89,6 +89,24 @@ impl Ruleset {
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the first push rule that applies to this event, if any.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `event` - The raw JSON of a room message event.
|
||||
/// * `context` - The context of the message and room at the time of the event.
|
||||
pub fn get_match<T>(
|
||||
&self,
|
||||
event: &Raw<T>,
|
||||
context: &PushConditionRoomCtx,
|
||||
) -> Option<AnyPushRuleRef<'_>>
|
||||
where
|
||||
T: Serialize,
|
||||
{
|
||||
let event = FlattenedJson::from_raw(event);
|
||||
self.iter().find(|rule| rule.applies(&event, context))
|
||||
}
|
||||
|
||||
/// Get the push actions that apply to this event.
|
||||
///
|
||||
/// Returns an empty slice if no push rule applies.
|
||||
@ -101,11 +119,7 @@ impl Ruleset {
|
||||
where
|
||||
T: Serialize,
|
||||
{
|
||||
let event = FlattenedJson::from_raw(event);
|
||||
self.iter()
|
||||
.find(|rule| rule.applies(&event, context))
|
||||
.map(|rule| rule.actions())
|
||||
.unwrap_or(&[])
|
||||
self.get_match(event, context).map(|rule| rule.actions()).unwrap_or(&[])
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user