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 `push::Ruleset::iter()` for borrowing iteration of rulesets
|
||||||
* Add conversions between `AnyPushRule` and `AnyPushRuleRef`
|
* Add conversions between `AnyPushRule` and `AnyPushRuleRef`
|
||||||
(`AnyPushRule::as_ref` and `AnyPushRuleRef::to_owned`)
|
(`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
|
# 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.
|
/// Get the push actions that apply to this event.
|
||||||
///
|
///
|
||||||
/// Returns an empty slice if no push rule applies.
|
/// Returns an empty slice if no push rule applies.
|
||||||
@ -101,11 +119,7 @@ impl Ruleset {
|
|||||||
where
|
where
|
||||||
T: Serialize,
|
T: Serialize,
|
||||||
{
|
{
|
||||||
let event = FlattenedJson::from_raw(event);
|
self.get_match(event, context).map(|rule| rule.actions()).unwrap_or(&[])
|
||||||
self.iter()
|
|
||||||
.find(|rule| rule.applies(&event, context))
|
|
||||||
.map(|rule| rule.actions())
|
|
||||||
.unwrap_or(&[])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user