1use ruma::{api::client::sync::sync_events::v5 as http, events::StateEventType};
23use crate::sliding_sync::sticky_parameters::StickyData;
45/// 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.
10required_state: Vec<(StateEventType, String)>,
1112/// Return a stripped variant of membership events for the users used to
13 /// calculate the room name.
14include_heroes: Option<bool>,
1516/// Any filters to apply to the query.
17filters: Option<http::request::ListFilters>,
18}
1920impl SlidingSyncListStickyParameters {
21pub 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.
28Self { required_state, include_heroes, filters }
29 }
30}
3132impl StickyData for SlidingSyncListStickyParameters {
33type Request = http::request::List;
3435fn 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}