#[non_exhaustive]pub struct RoomMemberEventContent {
pub avatar_url: Option<OwnedMxcUri>,
pub displayname: Option<String>,
pub is_direct: Option<bool>,
pub membership: MembershipState,
pub third_party_invite: Option<ThirdPartyInvite>,
pub blurhash: Option<String>,
pub reason: Option<String>,
pub join_authorized_via_users_server: Option<OwnedUserId>,
}
Expand description
The content of an m.room.member
event.
The current membership state of a user in the room.
Adjusts the membership state for a user in a room. It is preferable to use the membership
APIs (/rooms/<room id>/invite
etc) when performing membership actions rather than
adjusting the state directly as there are a restricted set of valid transformations. For
example, user A cannot force user B to join a room, and trying to force this state change
directly will fail.
This event may also include an invite_room_state
key inside the event’s unsigned data, but
Ruma doesn’t currently expose this; see #998.
The user for which a membership applies is represented by the state_key
. Under some
conditions, the sender
and state_key
may not match - this may be interpreted as the
sender
affecting the membership state of the state_key
user.
The membership for a given user can change over time. Previous membership can be retrieved
from the prev_content
object on an event. If not present, the user’s previous membership
must be assumed as leave.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.avatar_url: Option<OwnedMxcUri>
The avatar URL for this user, if any.
This is added by the homeserver. If you activate the compat-empty-string-null
feature,
this field being an empty string in JSON will result in None
here during deserialization.
displayname: Option<String>
The display name for this user, if any.
This is added by the homeserver.
is_direct: Option<bool>
Flag indicating whether the room containing this event was created with the intention of being a direct chat.
membership: MembershipState
The membership state of this user.
third_party_invite: Option<ThirdPartyInvite>
If this member event is the successor to a third party invitation, this field will contain information about that invitation.
blurhash: Option<String>
unstable-msc2448
only.reason: Option<String>
User-supplied text for why their membership has changed.
For kicks and bans, this is typically the reason for the kick or ban. For other membership changes, this is a way for the user to communicate their intent without having to send a message to the room, such as in a case where Bob rejects an invite from Alice about an upcoming concert, but can’t make it that day.
Clients are not recommended to show this reason to users when receiving an invite due to the potential for spam and abuse. Hiding the reason behind a button or other component is recommended.
Arbitrarily chosen UserId
(MxID) of a local user who can send an invite.
Implementations§
Source§impl RoomMemberEventContent
impl RoomMemberEventContent
Sourcepub fn new(membership: MembershipState) -> RoomMemberEventContent
pub fn new(membership: MembershipState) -> RoomMemberEventContent
Creates a new RoomMemberEventContent
with the given membership state.
Sourcepub fn details(&self) -> MembershipDetails<'_>
pub fn details(&self) -> MembershipDetails<'_>
Obtain the details about this event that are required to calculate a membership change.
This is required when you want to calculate the change a redacted m.room.member
event
made.
Sourcepub fn membership_change<'a>(
&'a self,
prev_details: Option<MembershipDetails<'a>>,
sender: &UserId,
state_key: &UserId,
) -> MembershipChange<'a>
pub fn membership_change<'a>( &'a self, prev_details: Option<MembershipDetails<'a>>, sender: &UserId, state_key: &UserId, ) -> MembershipChange<'a>
Helper function for membership change.
This requires data from the full event:
- The previous details computed from
event.unsigned.prev_content
, - The sender of the event,
- The state key of the event.
Check the specification for details.
Trait Implementations§
Source§impl Clone for RoomMemberEventContent
impl Clone for RoomMemberEventContent
Source§fn clone(&self) -> RoomMemberEventContent
fn clone(&self) -> RoomMemberEventContent
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for RoomMemberEventContent
impl Debug for RoomMemberEventContent
Source§impl<'de> Deserialize<'de> for RoomMemberEventContent
impl<'de> Deserialize<'de> for RoomMemberEventContent
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<RoomMemberEventContent, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<RoomMemberEventContent, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl EventContent for RoomMemberEventContent
impl EventContent for RoomMemberEventContent
Source§type EventType = StateEventType
type EventType = StateEventType
Source§fn event_type(&self) -> <RoomMemberEventContent as EventContent>::EventType
fn event_type(&self) -> <RoomMemberEventContent as EventContent>::EventType
m.room.message
.Source§impl From<RoomMemberEventContent> for AnyStateEventContent
impl From<RoomMemberEventContent> for AnyStateEventContent
Source§fn from(c: RoomMemberEventContent) -> AnyStateEventContent
fn from(c: RoomMemberEventContent) -> AnyStateEventContent
Source§impl PossiblyRedactedStateEventContent for RoomMemberEventContent
impl PossiblyRedactedStateEventContent for RoomMemberEventContent
Source§type StateKey = OwnedUserId
type StateKey = OwnedUserId
state_key
field.Source§impl RedactContent for RoomMemberEventContent
impl RedactContent for RoomMemberEventContent
Source§type Redacted = RedactedRoomMemberEventContent
type Redacted = RedactedRoomMemberEventContent
Source§fn redact(self, version: &RoomVersionId) -> RedactedRoomMemberEventContent
fn redact(self, version: &RoomVersionId) -> RedactedRoomMemberEventContent
self
into a redacted form (removing most or all fields) according to the spec. Read moreSource§impl Serialize for RoomMemberEventContent
impl Serialize for RoomMemberEventContent
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Source§impl StateEventContent for RoomMemberEventContent
impl StateEventContent for RoomMemberEventContent
Source§type StateKey = OwnedUserId
type StateKey = OwnedUserId
state_key
field.Source§impl StaticStateEventContent for RoomMemberEventContent
impl StaticStateEventContent for RoomMemberEventContent
Source§type PossiblyRedacted = RoomMemberEventContent
type PossiblyRedacted = RoomMemberEventContent
Source§type Unsigned = RoomMemberUnsigned
type Unsigned = RoomMemberUnsigned
unsigned
field.Auto Trait Implementations§
impl Freeze for RoomMemberEventContent
impl RefUnwindSafe for RoomMemberEventContent
impl Send for RoomMemberEventContent
impl Sync for RoomMemberEventContent
impl Unpin for RoomMemberEventContent
impl UnwindSafe for RoomMemberEventContent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> CompatExt for T
impl<T> CompatExt for T
Source§impl<T> EventContentFromType for Twhere
T: EventContent + DeserializeOwned,
impl<T> EventContentFromType for Twhere
T: EventContent + DeserializeOwned,
Source§impl<T, UT> HandleAlloc<UT> for T
impl<T, UT> HandleAlloc<UT> for T
Source§fn consume_handle(handle: Handle) -> Arc<T>
fn consume_handle(handle: Handle) -> Arc<T>
Arc<>
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more