matrix_sdk/sliding_sync/list/
sticky.rs

1use ruma::{api::client::sync::sync_events::v5 as http, events::StateEventType};
2
3use crate::sliding_sync::sticky_parameters::StickyData;
4
5/// The set of `SlidingSyncList` request parameters that are *sticky*, as
6/// defined by the [Sliding Sync MSC](https://github.com/matrix-org/matrix-spec-proposals/blob/kegan/sync-v3/proposals/3575-sync.md).
7#[derive(Debug)]
8pub(super) struct SlidingSyncListStickyParameters {
9    /// Required states to return per room.
10    required_state: Vec<(StateEventType, String)>,
11
12    /// Return a stripped variant of membership events for the users used to
13    /// calculate the room name.
14    include_heroes: Option<bool>,
15
16    /// Any filters to apply to the query.
17    filters: Option<http::request::ListFilters>,
18}
19
20impl SlidingSyncListStickyParameters {
21    pub fn new(
22        required_state: Vec<(StateEventType, String)>,
23        include_heroes: Option<bool>,
24        filters: Option<http::request::ListFilters>,
25    ) -> Self {
26        // Consider that each list will have at least one parameter set, so invalidate
27        // it by default.
28        Self { required_state, include_heroes, filters }
29    }
30}
31
32impl StickyData for SlidingSyncListStickyParameters {
33    type Request = http::request::List;
34
35    fn apply(&self, request: &mut Self::Request) {
36        request.room_details.required_state = self.required_state.to_vec();
37        request.include_heroes = self.include_heroes;
38        request.filters = self.filters.clone();
39    }
40}