tuwunel_core/config/
room_version.rs1use ruma::{RoomVersionId, api::client::discovery::get_capabilities::v3::RoomVersionStability};
2
3use crate::Config;
4
5pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] =
7 &[RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
8
9pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[
11 RoomVersionId::V6,
12 RoomVersionId::V7,
13 RoomVersionId::V8,
14 RoomVersionId::V9,
15 RoomVersionId::V10,
16 RoomVersionId::V11,
17 RoomVersionId::V12,
18];
19
20pub const EXPERIMENTAL_ROOM_VERSIONS: &[RoomVersionId] = &[];
22
23impl Config {
24 #[inline]
25 #[must_use]
26 pub fn supported_room_version(&self, version: &RoomVersionId) -> bool {
27 self.supported_room_versions()
28 .any(|(supported_version, _)| &supported_version == version)
29 }
30
31 #[inline]
32 pub fn supported_room_versions(
33 &self,
34 ) -> impl Iterator<Item = (RoomVersionId, RoomVersionStability)> + '_ {
35 let stable_room_versions = STABLE_ROOM_VERSIONS
36 .iter()
37 .cloned()
38 .map(|version| (version, RoomVersionStability::Stable));
39
40 let unstable_room_versions = UNSTABLE_ROOM_VERSIONS
41 .iter()
42 .filter(|_| self.allow_unstable_room_versions)
43 .cloned()
44 .map(|version| (version, RoomVersionStability::Unstable));
45
46 let experimental_room_versions = EXPERIMENTAL_ROOM_VERSIONS
47 .iter()
48 .filter(|_| self.allow_experimental_room_versions)
49 .cloned()
50 .map(|version| (version, RoomVersionStability::Unstable));
51
52 stable_room_versions
53 .chain(unstable_room_versions)
54 .chain(experimental_room_versions)
55 }
56}