Allow room_types in directory::Filter to be null with the compat feature
This commit is contained in:
parent
5ff113a286
commit
1c9e0e7718
@ -109,7 +109,7 @@ impl From<PublicRoomsChunkInit> for PublicRoomsChunk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A filter for public rooms lists
|
/// A filter for public rooms lists.
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||||
pub struct Filter {
|
pub struct Filter {
|
||||||
@ -121,6 +121,7 @@ pub struct Filter {
|
|||||||
///
|
///
|
||||||
/// Includes all room types if it is empty.
|
/// Includes all room types if it is empty.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||||
|
#[cfg_attr(feature = "compat", serde(deserialize_with = "crate::serde::none_as_default"))]
|
||||||
pub room_types: Vec<RoomTypeFilter>,
|
pub room_types: Vec<RoomTypeFilter>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
//!
|
//!
|
||||||
//! [serde_urlencoded]: https://github.com/nox/serde_urlencoded
|
//! [serde_urlencoded]: https://github.com/nox/serde_urlencoded
|
||||||
|
|
||||||
use serde::{de, Deserialize};
|
use serde::{de, Deserialize, Deserializer};
|
||||||
use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue};
|
use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue};
|
||||||
|
|
||||||
pub mod base64;
|
pub mod base64;
|
||||||
@ -40,6 +40,15 @@ pub fn is_default<T: Default + PartialEq>(val: &T) -> bool {
|
|||||||
*val == T::default()
|
*val == T::default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserialize a `T` via `Option<T>`, falling back to `T::default()`.
|
||||||
|
pub fn none_as_default<'de, D, T>(deserializer: D) -> Result<T, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
T: Default + Deserialize<'de>,
|
||||||
|
{
|
||||||
|
Ok(Option::deserialize(deserializer)?.unwrap_or_default())
|
||||||
|
}
|
||||||
|
|
||||||
/// Simply returns `true`.
|
/// Simply returns `true`.
|
||||||
///
|
///
|
||||||
/// Useful for `#[serde(default = ...)]`.
|
/// Useful for `#[serde(default = ...)]`.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user