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