pub mod unstable {
use std::collections::BTreeSet;
use js_int::UInt;
use ruma_common::{
OwnedRoomOrAliasId, OwnedServerName,
api::{auth_scheme::AccessTokenOptional, request, response},
metadata,
serde::Raw,
};
use ruma_events::{AnyStrippedStateEvent, StateEventType};
pub const MAX_VIAS: usize = 32;
metadata! {
method: POST,
rate_limited: true,
authentication: AccessTokenOptional,
history: {
unstable("org.continuwuity.msc4560") => "/_matrix/client/unstable/org.continuwuity.msc4560.stripped_state/{room_id_or_alias}",
}
}
#[request]
pub struct Request {
#[ruma_api(path)]
pub room_id_or_alias: OwnedRoomOrAliasId,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
#[ruma_api(query)]
pub via: Vec<OwnedServerName>,
#[serde(default, skip_serializing_if = "BTreeSet::is_empty")]
pub state: BTreeSet<StateEventType>,
#[serde(default, skip_serializing_if = "ruma_common::serde::is_default")]
pub num_joined_members: bool,
}
impl Request {
pub fn new(room_id_or_alias: OwnedRoomOrAliasId, via: Vec<OwnedServerName>) -> Self {
Self { room_id_or_alias, via, state: BTreeSet::new(), num_joined_members: false }
}
pub fn is_empty(&self) -> bool {
let Self { room_id_or_alias: _, via: _, state, num_joined_members } = &self;
state.is_empty() && !*num_joined_members
}
}
#[response]
pub struct Response {
pub state: Vec<Raw<AnyStrippedStateEvent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num_joined_members: Option<UInt>,
pub via: OwnedServerName,
}
impl Response {
pub fn new(via: OwnedServerName) -> Self {
Self { state: vec![], num_joined_members: None, via }
}
}
}