Add CanonicalAliasEvent, CreateEvent, and HistoryVisibilityEvent.
This commit is contained in:
parent
9027948381
commit
1684154578
159
src/room/mod.rs
159
src/room/mod.rs
@ -57,3 +57,162 @@ pub struct AliasesEventContent<'a> {
|
||||
/// A list of room aliases.
|
||||
aliases: &'a[&'a str],
|
||||
}
|
||||
|
||||
/// Informs the room as to which alias is the canonical one.
|
||||
pub struct CanonicalAliasEvent<'a, 'b> {
|
||||
content: CanonicalAliasEventContent<'a>,
|
||||
event_id: &'a str,
|
||||
prev_content: Option<CanonicalAliasEventContent<'b>>,
|
||||
room_id: &'a str,
|
||||
user_id: &'a str,
|
||||
}
|
||||
|
||||
impl<'a, 'b> Event<'a, CanonicalAliasEventContent<'a>> for CanonicalAliasEvent<'a, 'b> {
|
||||
fn content(&'a self) -> &'a CanonicalAliasEventContent<'a> {
|
||||
&self.content
|
||||
}
|
||||
|
||||
fn event_type(&self) -> &'static str {
|
||||
"m.room.canonical_alias"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> RoomEvent<'a, CanonicalAliasEventContent<'a>> for CanonicalAliasEvent<'a, 'b> {
|
||||
fn event_id(&'a self) -> &'a str {
|
||||
&self.event_id
|
||||
}
|
||||
|
||||
fn room_id(&'a self) -> &'a str {
|
||||
&self.room_id
|
||||
}
|
||||
|
||||
fn user_id(&'a self) -> &'a str {
|
||||
&self.user_id
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> StateEvent<'a, 'b, CanonicalAliasEventContent<'a>> for CanonicalAliasEvent<'a, 'b> {
|
||||
fn prev_content(&'a self) -> Option<&'b CanonicalAliasEventContent> {
|
||||
match self.prev_content {
|
||||
Some(ref prev_content) => Some(prev_content),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The payload of a `CanonicalAliasEvent`.
|
||||
pub struct CanonicalAliasEventContent<'a> {
|
||||
/// The canonical alias.
|
||||
alias: &'a str,
|
||||
}
|
||||
|
||||
/// This is the first event in a room and cannot be changed. It acts as the root of all other
|
||||
/// events.
|
||||
pub struct CreateEvent<'a, 'b> {
|
||||
content: CreateEventContent<'a>,
|
||||
event_id: &'a str,
|
||||
prev_content: Option<CreateEventContent<'b>>,
|
||||
room_id: &'a str,
|
||||
user_id: &'a str,
|
||||
}
|
||||
|
||||
impl<'a, 'b> Event<'a, CreateEventContent<'a>> for CreateEvent<'a, 'b> {
|
||||
fn content(&'a self) -> &'a CreateEventContent<'a> {
|
||||
&self.content
|
||||
}
|
||||
|
||||
fn event_type(&self) -> &'static str {
|
||||
"m.room.create"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> RoomEvent<'a, CreateEventContent<'a>> for CreateEvent<'a, 'b> {
|
||||
fn event_id(&'a self) -> &'a str {
|
||||
&self.event_id
|
||||
}
|
||||
|
||||
fn room_id(&'a self) -> &'a str {
|
||||
&self.room_id
|
||||
}
|
||||
|
||||
fn user_id(&'a self) -> &'a str {
|
||||
&self.user_id
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> StateEvent<'a, 'b, CreateEventContent<'a>> for CreateEvent<'a, 'b> {}
|
||||
|
||||
/// The payload of a `CreateEvent`.
|
||||
pub struct CreateEventContent<'a> {
|
||||
/// The `user_id` of the room creator. This is set by the homeserver.
|
||||
creator: &'a str,
|
||||
}
|
||||
|
||||
/// This event controls whether a member of a room can see the events that happened in a room from
|
||||
/// before they joined.
|
||||
pub struct HistoryVisibilityEvent<'a, 'b> {
|
||||
content: HistoryVisibilityEventContent<'a>,
|
||||
event_id: &'a str,
|
||||
prev_content: Option<HistoryVisibilityEventContent<'b>>,
|
||||
room_id: &'a str,
|
||||
user_id: &'a str,
|
||||
}
|
||||
|
||||
impl<'a, 'b> Event<'a, HistoryVisibilityEventContent<'a>> for HistoryVisibilityEvent<'a, 'b> {
|
||||
fn content(&'a self) -> &'a HistoryVisibilityEventContent<'a> {
|
||||
&self.content
|
||||
}
|
||||
|
||||
fn event_type(&self) -> &'static str {
|
||||
"m.room.history_visibility"
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> RoomEvent<'a, HistoryVisibilityEventContent<'a>> for HistoryVisibilityEvent<'a, 'b> {
|
||||
fn event_id(&'a self) -> &'a str {
|
||||
&self.event_id
|
||||
}
|
||||
|
||||
fn room_id(&'a self) -> &'a str {
|
||||
&self.room_id
|
||||
}
|
||||
|
||||
fn user_id(&'a self) -> &'a str {
|
||||
&self.user_id
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> StateEvent<'a, 'b, HistoryVisibilityEventContent<'a>>
|
||||
for HistoryVisibilityEvent<'a, 'b>
|
||||
{
|
||||
fn prev_content(&'a self) -> Option<&'b HistoryVisibilityEventContent> {
|
||||
match self.prev_content {
|
||||
Some(ref prev_content) => Some(prev_content),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The payload of a `HistoryVisibilityEvent`.
|
||||
pub struct HistoryVisibilityEventContent<'a> {
|
||||
/// Who can see the room history.
|
||||
history_visibility: &'a HistoryVisibility,
|
||||
}
|
||||
|
||||
/// Who can see a room's history.
|
||||
pub enum HistoryVisibility {
|
||||
/// Previous events are accessible to newly joined members from the point they were invited
|
||||
/// onwards. Events stop being accessible when the member's state changes to something other
|
||||
/// than *invite* or *join*.
|
||||
Invited,
|
||||
/// Previous events are accessible to newly joined members from the point they joined the room
|
||||
/// onwards. Events stop being accessible when the member's state changes to something other
|
||||
/// than *join*.
|
||||
Joined,
|
||||
/// Previous events are always accessible to newly joined members. All events in the room are
|
||||
/// accessible, even those sent when the member was not a part of the room.
|
||||
Shared,
|
||||
/// All events while this is the `HistoryVisibility` value may be shared by any
|
||||
/// participating homeserver with anyone, regardless of whether they have ever joined the room.
|
||||
WorldReadable,
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user