use matrix_sdk_base::sliding_sync::http;
use ruma::events::StateEventType;
use super::Bound;
use crate::sliding_sync::sticky_parameters::StickyData;
#[derive(Debug)]
pub(super) struct SlidingSyncListStickyParameters {
required_state: Vec<(StateEventType, String)>,
include_heroes: Option<bool>,
filters: Option<http::request::ListFilters>,
timeline_limit: Option<Bound>,
}
impl SlidingSyncListStickyParameters {
pub fn new(
required_state: Vec<(StateEventType, String)>,
include_heroes: Option<bool>,
filters: Option<http::request::ListFilters>,
timeline_limit: Option<Bound>,
) -> Self {
Self { required_state, include_heroes, filters, timeline_limit }
}
}
impl SlidingSyncListStickyParameters {
pub(super) fn timeline_limit(&self) -> Option<Bound> {
self.timeline_limit
}
pub(super) fn set_timeline_limit(&mut self, timeline: Option<Bound>) {
self.timeline_limit = timeline;
}
}
impl StickyData for SlidingSyncListStickyParameters {
type Request = http::request::List;
fn apply(&self, request: &mut Self::Request) {
request.room_details.required_state = self.required_state.to_vec();
request.room_details.timeline_limit = self.timeline_limit.map(Into::into);
request.include_heroes = self.include_heroes;
request.filters = self.filters.clone();
}
}