about summary refs log tree commit diff
path: root/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
diff options
context:
space:
mode:
Diffstat (limited to 'LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs')
-rw-r--r--LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs60
1 files changed, 60 insertions, 0 deletions
diff --git a/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
new file mode 100644
index 0000000..48202a5
--- /dev/null
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
@@ -0,0 +1,60 @@
+using System.Text.Json.Serialization;
+
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
+
+[MatrixEvent(EventName = EventId)]
+public class RoomJoinRulesEventContent : EventContent {
+    public const string EventId = "m.room.join_rules";
+
+    /// <summary>
+    /// one of ["public", "invite", "knock", "restricted", "knock_restricted"]
+    /// "private" is reserved without implementation!
+    /// unknown values are treated as "private"
+    /// </summary>
+    [JsonPropertyName("join_rule")]
+    public string JoinRuleValue { get; set; }
+
+    [JsonIgnore]
+    public JoinRules JoinRule {
+        get => JoinRuleValue switch {
+            "public" => JoinRules.Public,
+            "invite" => JoinRules.Invite,
+            "knock" => JoinRules.Knock,
+            "restricted" => JoinRules.Restricted,
+            "knock_restricted" => JoinRules.KnockRestricted,
+            _ => JoinRules.Private
+        };
+        set => JoinRuleValue = value switch {
+            JoinRules.Public => "public",
+            JoinRules.Invite => "invite",
+            JoinRules.Knock => "knock",
+            JoinRules.Restricted => "restricted",
+            JoinRules.KnockRestricted => "knock_restricted",
+            _ => "private"
+        };
+    }
+
+    [JsonPropertyName("allow")]
+    public List<AllowEntry>? Allow { get; set; }
+
+    public class AllowEntry {
+        [JsonPropertyName("type")]
+        public required string Type { get; set; }
+
+        [JsonPropertyName("room_id")]
+        public required string RoomId { get; set; }
+
+        public static class Types {
+            public const string RoomMembership = "m.room_membership";
+        }
+    }
+
+    public enum JoinRules {
+        Public,
+        Invite,
+        Knock,
+        Restricted,
+        KnockRestricted,
+        Private // reserved without implementation!
+    }
+}
\ No newline at end of file