diff --git a/crates/ruma-client-api/CHANGELOG.md b/crates/ruma-client-api/CHANGELOG.md index 3a15d417..8afb0402 100644 --- a/crates/ruma-client-api/CHANGELOG.md +++ b/crates/ruma-client-api/CHANGELOG.md @@ -28,7 +28,7 @@ Improvements: (`Future` events are scheduled messages that can be controlled with `future_tokens` to send on demand or restart the timeout) - Change types of `SyncRequestListFilters::{room_types,not_room_types}` to - `Vec>` instead of a vector of strings + `Vec` instead of a vector of strings - This is a breaking change, but only for users of `unstable-msc3575` Bug fixes: diff --git a/crates/ruma-client-api/src/sync/sync_events/v4.rs b/crates/ruma-client-api/src/sync/sync_events/v4.rs index 3d88be78..1f9768ff 100644 --- a/crates/ruma-client-api/src/sync/sync_events/v4.rs +++ b/crates/ruma-client-api/src/sync/sync_events/v4.rs @@ -10,8 +10,8 @@ use js_int::UInt; use js_option::JsOption; use ruma_common::{ api::{request, response, Metadata}, + directory::RoomTypeFilter, metadata, - room::RoomType, serde::{deserialize_cow_str, duration::opt_ms, Raw}, DeviceKeyAlgorithm, MilliSecondsSinceUnixEpoch, OwnedMxcUri, OwnedRoomId, OwnedUserId, RoomId, }; @@ -231,14 +231,14 @@ pub struct SyncRequestListFilters { /// returned regardless of type. This can be used to get the initial set of spaces for an /// account. #[serde(default, skip_serializing_if = "Vec::is_empty")] - pub room_types: Vec>, + pub room_types: Vec, /// Only list rooms that are not of these create-types, or all. /// /// Same as "room_types" but inverted. This can be used to filter out spaces from the room /// list. #[serde(default, skip_serializing_if = "<[_]>::is_empty")] - pub not_room_types: Vec>, + pub not_room_types: Vec, /// Only list rooms matching the given string, or all. /// diff --git a/crates/ruma-common/src/directory.rs b/crates/ruma-common/src/directory.rs index f7460886..b6a2a3e2 100644 --- a/crates/ruma-common/src/directory.rs +++ b/crates/ruma-common/src/directory.rs @@ -223,12 +223,32 @@ where } } +impl From> for RoomTypeFilter { + fn from(t: Option) -> Self { + match t { + None => Self::Default, + Some(s) => match s { + RoomType::Space => Self::Space, + _ => Self::from(Some(s.as_str())), + }, + } + } +} + #[cfg(test)] mod tests { use assert_matches2::assert_matches; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; use super::{Filter, RoomNetwork, RoomTypeFilter}; + use crate::room::RoomType; + + #[test] + fn test_from_room_type() { + let test = RoomType::Space; + let other: RoomTypeFilter = RoomTypeFilter::from(Some(test)); + assert_eq!(other, RoomTypeFilter::Space); + } #[test] fn serialize_matrix_network_only() {