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