pub mod unstable {
use std::collections::BTreeSet;
use js_int::UInt;
use ruma_common::{
OwnedRoomId,
api::{request, response},
metadata,
serde::Raw,
};
use ruma_events::{AnyStrippedStateEvent, StateEventType};
use crate::authentication::ServerSignatures;
metadata! {
method: POST,
rate_limited: true,
authentication: ServerSignatures,
path: "/_matrix/federation/unstable/org.continuwuity.msc4560.stripped_state/{room_id}",
}
#[request]
pub struct Request {
#[ruma_api(path)]
pub room_id: OwnedRoomId,
#[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: OwnedRoomId) -> Self {
Self { room_id, state: BTreeSet::new(), num_joined_members: false }
}
pub fn is_empty(&self) -> bool {
let Self { room_id: _, state, num_joined_members } = &self;
state.is_empty() && !*num_joined_members
}
}
#[response]
#[derive(Default)]
pub struct Response {
pub state: Vec<Raw<AnyStrippedStateEvent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num_joined_members: Option<UInt>,
}
impl Response {
pub fn new() -> Self {
Self::default()
}
}
}