tuwunel_core/config/
room_version.rs1use ruma::{RoomVersionId, api::client::discovery::get_capabilities::v3::RoomVersionStability};
7
8use crate::Config;
9
10pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] =
12 &[RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
13
14pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[
16 RoomVersionId::V6,
17 RoomVersionId::V7,
18 RoomVersionId::V8,
19 RoomVersionId::V9,
20 RoomVersionId::V10,
21 RoomVersionId::V11,
22 RoomVersionId::V12,
23];
24
25pub const EXPERIMENTAL_ROOM_VERSIONS: &[RoomVersionId] = &[];
27
28impl Config {
29 #[inline]
30 #[must_use]
31 pub fn supported_room_version(&self, version: &RoomVersionId) -> bool {
37 self.supported_room_versions()
38 .any(|(supported_version, _)| &supported_version == version)
39 }
40
41 #[inline]
42 pub fn supported_room_versions(
47 &self,
48 ) -> impl Iterator<Item = (RoomVersionId, RoomVersionStability)> + '_ {
49 let stable_room_versions = STABLE_ROOM_VERSIONS
50 .iter()
51 .cloned()
52 .map(|version| (version, RoomVersionStability::Stable));
53
54 let unstable_room_versions = UNSTABLE_ROOM_VERSIONS
55 .iter()
56 .filter(|_| self.allow_unstable_room_versions)
57 .cloned()
58 .map(|version| (version, RoomVersionStability::Unstable));
59
60 let experimental_room_versions = EXPERIMENTAL_ROOM_VERSIONS
61 .iter()
62 .filter(|_| self.allow_experimental_room_versions)
63 .cloned()
64 .map(|version| (version, RoomVersionStability::Unstable));
65
66 stable_room_versions
67 .chain(unstable_room_versions)
68 .chain(experimental_room_versions)
69 }
70}