ruma_state_res/events/
join_rules.rs1use std::ops::Deref;
4
5use ruma_common::{room::JoinRuleKind, serde::from_raw_json_value};
6use serde::Deserialize;
7
8use super::Event;
9
10#[derive(Debug, Clone)]
14pub struct RoomJoinRulesEvent<E: Event>(E);
15
16impl<E: Event> RoomJoinRulesEvent<E> {
17 pub fn new(event: E) -> Self {
19 Self(event)
20 }
21
22 pub fn join_rule(&self) -> Result<JoinRuleKind, String> {
24 #[derive(Deserialize)]
25 struct RoomJoinRulesContentJoinRule {
26 join_rule: JoinRuleKind,
27 }
28
29 let content: RoomJoinRulesContentJoinRule =
30 from_raw_json_value(self.content()).map_err(|err: serde_json::Error| {
31 format!("missing or invalid `join_rule` field in `m.room.join_rules` event: {err}")
32 })?;
33 Ok(content.join_rule)
34 }
35}
36
37impl<E: Event> Deref for RoomJoinRulesEvent<E> {
38 type Target = E;
39
40 fn deref(&self) -> &Self::Target {
41 &self.0
42 }
43}