Make remaining filter types lifetime-generic
This commit is contained in:
parent
30a0a39d2b
commit
d6beef3d07
@ -6,7 +6,7 @@ use ruma_common::Raw;
|
|||||||
use ruma_events::{AnyRoomEvent, AnyStateEvent};
|
use ruma_events::{AnyRoomEvent, AnyStateEvent};
|
||||||
use ruma_identifiers::{EventId, RoomId};
|
use ruma_identifiers::{EventId, RoomId};
|
||||||
|
|
||||||
use crate::r0::filter::RoomEventFilter;
|
use crate::r0::filter::{IncomingRoomEventFilter, RoomEventFilter};
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -42,7 +42,7 @@ ruma_api! {
|
|||||||
default,
|
default,
|
||||||
skip_serializing_if = "Option::is_none"
|
skip_serializing_if = "Option::is_none"
|
||||||
)]
|
)]
|
||||||
pub filter: Option<RoomEventFilter>,
|
pub filter: Option<RoomEventFilter<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
|
@ -26,22 +26,23 @@ pub enum EventFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Filters to be applied to room events
|
/// Filters to be applied to room events
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Copy, Debug, Default, Outgoing, Serialize)]
|
||||||
pub struct RoomEventFilter {
|
#[incoming_derive(Clone, Serialize)]
|
||||||
|
pub struct RoomEventFilter<'a> {
|
||||||
/// A list of event types to exclude.
|
/// A list of event types to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no event types are excluded. A matching type will be excluded
|
/// If this list is absent then no event types are excluded. A matching type will be excluded
|
||||||
/// even if it is listed in the 'types' filter. A '*' can be used as a wildcard to match any
|
/// even if it is listed in the 'types' filter. A '*' can be used as a wildcard to match any
|
||||||
/// sequence of characters.
|
/// sequence of characters.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_types: Vec<String>,
|
pub not_types: &'a [String],
|
||||||
|
|
||||||
/// A list of room IDs to exclude.
|
/// A list of room IDs to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no rooms are excluded. A matching room will be excluded even if
|
/// If this list is absent then no rooms are excluded. A matching room will be excluded even if
|
||||||
/// it is listed in the 'rooms' filter.
|
/// it is listed in the 'rooms' filter.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_rooms: Vec<String>,
|
pub not_rooms: &'a [String],
|
||||||
|
|
||||||
/// The maximum number of events to return.
|
/// The maximum number of events to return.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
@ -51,27 +52,27 @@ pub struct RoomEventFilter {
|
|||||||
///
|
///
|
||||||
/// If this list is absent then all rooms are included.
|
/// If this list is absent then all rooms are included.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub rooms: Option<Vec<RoomId>>,
|
pub rooms: Option<&'a [RoomId]>,
|
||||||
|
|
||||||
/// A list of sender IDs to exclude.
|
/// A list of sender IDs to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no senders are excluded. A matching sender will be excluded even
|
/// If this list is absent then no senders are excluded. A matching sender will be excluded even
|
||||||
/// if it is listed in the 'senders' filter.
|
/// if it is listed in the 'senders' filter.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_senders: Vec<UserId>,
|
pub not_senders: &'a [UserId],
|
||||||
|
|
||||||
/// A list of senders IDs to include.
|
/// A list of senders IDs to include.
|
||||||
///
|
///
|
||||||
/// If this list is absent then all senders are included.
|
/// If this list is absent then all senders are included.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub senders: Option<Vec<UserId>>,
|
pub senders: Option<&'a [UserId]>,
|
||||||
|
|
||||||
/// A list of event types to include.
|
/// A list of event types to include.
|
||||||
///
|
///
|
||||||
/// If this list is absent then all event types are included. A '*' can be used as a wildcard to
|
/// If this list is absent then all event types are included. A '*' can be used as a wildcard to
|
||||||
/// match any sequence of characters.
|
/// match any sequence of characters.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub types: Option<Vec<String>>,
|
pub types: Option<&'a [String]>,
|
||||||
|
|
||||||
/// If `true` include only events with a URL key in their content.
|
/// If `true` include only events with a URL key in their content.
|
||||||
/// If `false`, exclude such events.
|
/// If `false`, exclude such events.
|
||||||
@ -85,16 +86,17 @@ pub struct RoomEventFilter {
|
|||||||
pub lazy_load_options: LazyLoadOptions,
|
pub lazy_load_options: LazyLoadOptions,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RoomEventFilter {
|
impl<'a> RoomEventFilter<'a> {
|
||||||
/// A filter that can be used to ignore all room events
|
/// A filter that can be used to ignore all room events
|
||||||
pub fn ignore_all() -> Self {
|
pub fn ignore_all() -> Self {
|
||||||
Self { types: Some(vec![]), ..Default::default() }
|
Self { types: Some(&[]), ..Default::default() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Filters to be applied to room data
|
/// Filters to be applied to room data
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Copy, Debug, Default, Outgoing, Serialize)]
|
||||||
pub struct RoomFilter {
|
#[incoming_derive(Clone, Serialize)]
|
||||||
|
pub struct RoomFilter<'a> {
|
||||||
/// Include rooms that the user has left in the sync.
|
/// Include rooms that the user has left in the sync.
|
||||||
///
|
///
|
||||||
/// Defaults to false if not included.
|
/// Defaults to false if not included.
|
||||||
@ -103,54 +105,55 @@ pub struct RoomFilter {
|
|||||||
|
|
||||||
/// The per user account data to include for rooms.
|
/// The per user account data to include for rooms.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub account_data: Option<RoomEventFilter>,
|
pub account_data: Option<RoomEventFilter<'a>>,
|
||||||
|
|
||||||
/// The message and state update events to include for rooms.
|
/// The message and state update events to include for rooms.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub timeline: Option<RoomEventFilter>,
|
pub timeline: Option<RoomEventFilter<'a>>,
|
||||||
|
|
||||||
/// The events that aren't recorded in the room history, e.g. typing and receipts, to include
|
/// The events that aren't recorded in the room history, e.g. typing and receipts, to include
|
||||||
/// for rooms.
|
/// for rooms.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub ephemeral: Option<RoomEventFilter>,
|
pub ephemeral: Option<RoomEventFilter<'a>>,
|
||||||
|
|
||||||
/// The state events to include for rooms.
|
/// The state events to include for rooms.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub state: Option<RoomEventFilter>,
|
pub state: Option<RoomEventFilter<'a>>,
|
||||||
|
|
||||||
/// A list of room IDs to exclude.
|
/// A list of room IDs to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no rooms are excluded. A matching room will be excluded even if
|
/// If this list is absent then no rooms are excluded. A matching room will be excluded even if
|
||||||
/// it is listed in the 'rooms' filter. This filter is applied before the filters in
|
/// it is listed in the 'rooms' filter. This filter is applied before the filters in
|
||||||
/// `ephemeral`, `state`, `timeline` or `account_data`.
|
/// `ephemeral`, `state`, `timeline` or `account_data`.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_rooms: Vec<RoomId>,
|
pub not_rooms: &'a [RoomId],
|
||||||
|
|
||||||
/// A list of room IDs to include.
|
/// A list of room IDs to include.
|
||||||
///
|
///
|
||||||
/// If this list is absent then all rooms are included. This filter is applied before the
|
/// If this list is absent then all rooms are included. This filter is applied before the
|
||||||
/// filters in `ephemeral`, `state`, `timeline` or `account_data`.
|
/// filters in `ephemeral`, `state`, `timeline` or `account_data`.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub rooms: Option<Vec<RoomId>>,
|
pub rooms: Option<&'a [RoomId]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RoomFilter {
|
impl<'a> RoomFilter<'a> {
|
||||||
/// A filter that can be used to ignore all room events (of any type)
|
/// A filter that can be used to ignore all room events (of any type)
|
||||||
pub fn ignore_all() -> Self {
|
pub fn ignore_all() -> Self {
|
||||||
Self { rooms: Some(vec![]), ..Default::default() }
|
Self { rooms: Some(&[]), ..Default::default() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Filter for not-room data
|
/// Filter for not-room data
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Copy, Debug, Default, Outgoing, Serialize)]
|
||||||
pub struct Filter {
|
#[incoming_derive(Clone, Serialize)]
|
||||||
|
pub struct Filter<'a> {
|
||||||
/// A list of event types to exclude.
|
/// A list of event types to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no event types are excluded. A matching type will be excluded
|
/// If this list is absent then no event types are excluded. A matching type will be excluded
|
||||||
/// even if it is listed in the 'types' filter. A '*' can be used as a wildcard to match any
|
/// even if it is listed in the 'types' filter. A '*' can be used as a wildcard to match any
|
||||||
/// sequence of characters.
|
/// sequence of characters.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_types: Vec<String>,
|
pub not_types: &'a [String],
|
||||||
|
|
||||||
/// The maximum number of events to return.
|
/// The maximum number of events to return.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
@ -160,32 +163,32 @@ pub struct Filter {
|
|||||||
///
|
///
|
||||||
/// If this list is absent then all senders are included.
|
/// If this list is absent then all senders are included.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub senders: Option<Vec<UserId>>,
|
pub senders: Option<&'a [UserId]>,
|
||||||
|
|
||||||
/// A list of event types to include.
|
/// A list of event types to include.
|
||||||
///
|
///
|
||||||
/// If this list is absent then all event types are included. A '*' can be used as a wildcard to
|
/// If this list is absent then all event types are included. A '*' can be used as a wildcard to
|
||||||
/// match any sequence of characters.
|
/// match any sequence of characters.
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub types: Option<Vec<String>>,
|
pub types: Option<&'a [String]>,
|
||||||
|
|
||||||
/// A list of sender IDs to exclude.
|
/// A list of sender IDs to exclude.
|
||||||
///
|
///
|
||||||
/// If this list is absent then no senders are excluded. A matching sender will be excluded even
|
/// If this list is absent then no senders are excluded. A matching sender will be excluded even
|
||||||
/// if it is listed in the 'senders' filter.
|
/// if it is listed in the 'senders' filter.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||||
pub not_senders: Vec<UserId>,
|
pub not_senders: &'a [UserId],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Filter {
|
impl<'a> Filter<'a> {
|
||||||
/// A filter that can be used to ignore all events
|
/// A filter that can be used to ignore all events
|
||||||
pub fn ignore_all() -> Self {
|
pub fn ignore_all() -> Self {
|
||||||
Self { types: Some(vec![]), ..Default::default() }
|
Self { types: Some(&[]), ..Default::default() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A filter definition
|
/// A filter definition
|
||||||
#[derive(Clone, Debug, Default, Outgoing, Serialize)]
|
#[derive(Clone, Copy, Debug, Default, Outgoing, Serialize)]
|
||||||
#[incoming_derive(Clone, Serialize)]
|
#[incoming_derive(Clone, Serialize)]
|
||||||
pub struct FilterDefinition<'a> {
|
pub struct FilterDefinition<'a> {
|
||||||
/// List of event fields to include.
|
/// List of event fields to include.
|
||||||
@ -206,15 +209,15 @@ pub struct FilterDefinition<'a> {
|
|||||||
|
|
||||||
/// The presence updates to include.
|
/// The presence updates to include.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub presence: Option<Filter>,
|
pub presence: Option<Filter<'a>>,
|
||||||
|
|
||||||
/// The user account data that isn't associated with rooms to include.
|
/// The user account data that isn't associated with rooms to include.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub account_data: Option<Filter>,
|
pub account_data: Option<Filter<'a>>,
|
||||||
|
|
||||||
/// Filters to be applied to room data.
|
/// Filters to be applied to room data.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub room: Option<RoomFilter>,
|
pub room: Option<RoomFilter<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> FilterDefinition<'a> {
|
impl<'a> FilterDefinition<'a> {
|
||||||
|
@ -7,7 +7,7 @@ use ruma_events::{AnyRoomEvent, AnyStateEvent};
|
|||||||
use ruma_identifiers::RoomId;
|
use ruma_identifiers::RoomId;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::r0::filter::RoomEventFilter;
|
use crate::r0::filter::{IncomingRoomEventFilter, RoomEventFilter};
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -60,7 +60,7 @@ ruma_api! {
|
|||||||
default,
|
default,
|
||||||
skip_serializing_if = "Option::is_none"
|
skip_serializing_if = "Option::is_none"
|
||||||
)]
|
)]
|
||||||
pub filter: Option<RoomEventFilter>,
|
pub filter: Option<RoomEventFilter<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
@ -135,11 +135,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_serialize_some_room_event_filter() {
|
fn test_serialize_some_room_event_filter() {
|
||||||
let room_id = room_id!("!roomid:example.org");
|
let room_id = room_id!("!roomid:example.org");
|
||||||
|
let rooms = &[room_id.clone()];
|
||||||
let filter = RoomEventFilter {
|
let filter = RoomEventFilter {
|
||||||
lazy_load_options: LazyLoadOptions::Enabled { include_redundant_members: true },
|
lazy_load_options: LazyLoadOptions::Enabled { include_redundant_members: true },
|
||||||
rooms: Some(vec![room_id.clone()]),
|
rooms: Some(rooms),
|
||||||
not_rooms: vec!["room".into(), "room2".into(), "room3".into()],
|
not_rooms: &["room".into(), "room2".into(), "room3".into()],
|
||||||
not_types: vec!["type".into()],
|
not_types: &["type".into()],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let req = Request {
|
let req = Request {
|
||||||
|
@ -9,7 +9,7 @@ use ruma_events::{AnyEvent, AnyStateEvent};
|
|||||||
use ruma_identifiers::{EventId, RoomId, UserId};
|
use ruma_identifiers::{EventId, RoomId, UserId};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::r0::filter::RoomEventFilter;
|
use crate::r0::filter::{IncomingRoomEventFilter, RoomEventFilter};
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -73,7 +73,7 @@ impl<'a> Categories<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Criteria for searching a category of events.
|
/// Criteria for searching a category of events.
|
||||||
#[derive(Clone, Debug, Outgoing, Serialize)]
|
#[derive(Clone, Copy, Debug, Outgoing, Serialize)]
|
||||||
pub struct Criteria<'a> {
|
pub struct Criteria<'a> {
|
||||||
/// The string to search events for.
|
/// The string to search events for.
|
||||||
pub search_term: &'a str,
|
pub search_term: &'a str,
|
||||||
@ -84,7 +84,7 @@ pub struct Criteria<'a> {
|
|||||||
|
|
||||||
/// A `Filter` to apply to the search.
|
/// A `Filter` to apply to the search.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub filter: Option<RoomEventFilter>,
|
pub filter: Option<RoomEventFilter<'a>>,
|
||||||
|
|
||||||
/// The order in which to search for results.
|
/// The order in which to search for results.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user