client-api: Fix a bunch of issues for room::create_room
This commit is contained in:
parent
3b36a974fa
commit
7c31fceb61
@ -8,7 +8,8 @@ pub mod upgrade_room;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// Whether or not a newly created room will be listed in the room directory.
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[non_exhaustive]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum Visibility {
|
||||
/// Indicates that the room will be shown in the published room list.
|
||||
@ -17,3 +18,9 @@ pub enum Visibility {
|
||||
/// Indicates that the room will not be shown in the published room list.
|
||||
Private,
|
||||
}
|
||||
|
||||
impl Default for Visibility {
|
||||
fn default() -> Self {
|
||||
Self::Private
|
||||
}
|
||||
}
|
||||
|
@ -30,34 +30,34 @@ ruma_api! {
|
||||
#[non_exhaustive]
|
||||
request: {
|
||||
/// Extra keys to be added to the content of the `m.room.create`.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub creation_content: Option<CreationContent>,
|
||||
#[serde(default, skip_serializing_if = "CreationContent::is_empty")]
|
||||
pub creation_content: CreationContent,
|
||||
|
||||
/// List of state events to send to the new room.
|
||||
///
|
||||
/// Takes precedence over events set by preset, but gets overriden by
|
||||
/// name and topic keys.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub initial_state: Vec<AnyInitialStateEvent>,
|
||||
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||
pub initial_state: &'a [AnyInitialStateEvent],
|
||||
|
||||
/// A list of user IDs to invite to the room.
|
||||
///
|
||||
/// This will tell the server to invite everyone in the list to the newly created room.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub invite: Vec<UserId>,
|
||||
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||
pub invite: &'a [UserId],
|
||||
|
||||
/// List of third party IDs of users to invite.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub invite_3pid: Vec<Invite3pid>,
|
||||
#[serde(default, skip_serializing_if = "<[_]>::is_empty")]
|
||||
pub invite_3pid: &'a [Invite3pid],
|
||||
|
||||
/// If set, this sets the `is_direct` flag on room invites.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub is_direct: Option<bool>,
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_default")]
|
||||
pub is_direct: bool,
|
||||
|
||||
/// If this is included, an `m.room.name` event will be sent into the room to indicate
|
||||
/// the name of the room.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub name: Option<String>,
|
||||
pub name: Option<&'a str>,
|
||||
|
||||
/// Power level content to override in the default power level event.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
@ -69,22 +69,23 @@ ruma_api! {
|
||||
|
||||
/// The desired room alias local part.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub room_alias_name: Option<String>,
|
||||
pub room_alias_name: Option<&'a str>,
|
||||
|
||||
/// Room version to set for the room. Defaults to homeserver's default if not specified.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub room_version: Option<String>,
|
||||
pub room_version: Option<&'a RoomVersionId>,
|
||||
|
||||
/// If this is included, an `m.room.topic` event will be sent into the room to indicate
|
||||
/// the topic for the room.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub topic: Option<String>,
|
||||
pub topic: Option<&'a str>,
|
||||
|
||||
/// A public visibility indicates that the room will be shown in the published room
|
||||
/// list. A private visibility will hide the room from the published room list. Rooms
|
||||
/// default to private visibility if this key is not included.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub visibility: Option<Visibility>,
|
||||
/// list. A private visibility will hide the room from the published room list.
|
||||
///
|
||||
/// Defaults to `Private`.
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_default")]
|
||||
pub visibility: Visibility,
|
||||
}
|
||||
|
||||
#[non_exhaustive]
|
||||
@ -96,7 +97,7 @@ ruma_api! {
|
||||
error: crate::Error
|
||||
}
|
||||
|
||||
impl Request {
|
||||
impl<'a> Request<'a> {
|
||||
/// Creates a `Request` will all-default parameters.
|
||||
pub fn new() -> Self {
|
||||
Default::default()
|
||||
@ -115,6 +116,7 @@ impl Response {
|
||||
/// This is the same as the event content struct for `m.room.create`, but without some fields that
|
||||
/// servers are supposed to ignore.
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
#[non_exhaustive]
|
||||
pub struct CreationContent {
|
||||
/// Whether users on other servers can join this room.
|
||||
///
|
||||
@ -125,12 +127,18 @@ pub struct CreationContent {
|
||||
skip_serializing_if = "ruma_serde::is_true"
|
||||
)]
|
||||
pub federate: bool,
|
||||
|
||||
/// A reference to the room this room replaces, if the previous room was upgraded.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub predecessor: Option<PreviousRoom>,
|
||||
}
|
||||
|
||||
impl CreationContent {
|
||||
/// Creates a new `CreationContent` with all fields defaulted.
|
||||
pub fn new() -> Self {
|
||||
Self { federate: true, predecessor: None }
|
||||
}
|
||||
|
||||
/// Given a `CreationContent` and the other fields that a homeserver has to fill, construct
|
||||
/// a `CreateEventContent`.
|
||||
pub fn into_event_content(
|
||||
@ -140,10 +148,22 @@ impl CreationContent {
|
||||
) -> CreateEventContent {
|
||||
assign!(CreateEventContent::new(creator), { federate, room_version, predecessor })
|
||||
}
|
||||
|
||||
/// Returns whether all fields have their default value.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.federate && self.predecessor.is_none()
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for CreationContent {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
/// A convenience parameter for setting a few default state events.
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
||||
#[non_exhaustive]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum RoomPreset {
|
||||
/// `join_rules` is set to `invite` and `history_visibility` is set to `shared`.
|
||||
|
Loading…
x
Reference in New Issue
Block a user