tuwunel_service/rooms/state_res/
events.rs1pub mod create;
4pub mod join_rules;
5pub mod member;
6pub mod power_levels;
7pub mod third_party_invite;
8
9pub use self::{
10 create::RoomCreateEvent,
11 join_rules::{JoinRule, RoomJoinRulesEvent},
12 member::{RoomMemberEvent, RoomMemberEventContent},
13 power_levels::{RoomPowerLevelsEvent, RoomPowerLevelsIntField},
14 third_party_invite::RoomThirdPartyInviteEvent,
15};
16
17pub(super) fn is_power_event<Pdu>(event: &Pdu) -> bool
32where
33 Pdu: tuwunel_core::matrix::Event,
34{
35 use ruma::events::{TimelineEventType, room::member::MembershipState};
36
37 match event.event_type() {
38 | TimelineEventType::RoomPowerLevels
39 | TimelineEventType::RoomJoinRules
40 | TimelineEventType::RoomCreate => event.state_key() == Some(""),
41 | TimelineEventType::RoomMember => {
42 let content = RoomMemberEventContent::new(event.content());
43 if content.membership().is_ok_and(|membership| {
44 matches!(membership, MembershipState::Leave | MembershipState::Ban)
45 }) {
46 return Some(event.sender().as_str()) != event.state_key();
47 }
48
49 false
50 },
51 | _ => false,
52 }
53}