client-api: Deserialize empty avatar_url to None in set_avatar_url (feature = "compat")
This commit is contained in:
parent
6dd738c315
commit
f5e67d0f63
@ -34,6 +34,7 @@ maplit = "1.0.2"
|
||||
matches = "0.1.8"
|
||||
|
||||
[features]
|
||||
compat = []
|
||||
unstable-exhaustive-types = []
|
||||
unstable-pre-spec = []
|
||||
unstable-synapse-quirks = []
|
||||
|
@ -22,6 +22,10 @@ ruma_api! {
|
||||
///
|
||||
/// `None` is used to unset the avatar.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
#[cfg_attr(
|
||||
feature = "compat",
|
||||
serde(default, deserialize_with = "ruma_serde::empty_string_as_none")
|
||||
)]
|
||||
pub avatar_url: Option<&'a str>,
|
||||
}
|
||||
|
||||
@ -44,3 +48,37 @@ impl Response {
|
||||
Self
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use matches::assert_matches;
|
||||
use ruma_api::IncomingRequest as _;
|
||||
|
||||
use super::IncomingRequest;
|
||||
|
||||
#[test]
|
||||
fn deserialize_unset_request() -> Result<(), Box<dyn std::error::Error>> {
|
||||
assert_matches!(
|
||||
IncomingRequest::try_from_http_request(
|
||||
http::Request::builder()
|
||||
.method("PUT")
|
||||
.uri("https://bar.org/_matrix/client/r0/profile/@foo:bar.org/avatar_url")
|
||||
.body(Vec::<u8>::new())?,
|
||||
)?,
|
||||
IncomingRequest { user_id, avatar_url: None } if user_id == "@foo:bar.org"
|
||||
);
|
||||
|
||||
#[cfg(feature = "compat")]
|
||||
assert_matches!(
|
||||
IncomingRequest::try_from_http_request(
|
||||
http::Request::builder()
|
||||
.method("PUT")
|
||||
.uri("https://bar.org/_matrix/client/r0/profile/@foo:bar.org/avatar_url")
|
||||
.body(serde_json::to_vec(&serde_json::json!({ "avatar_url": "" }))?)?,
|
||||
)?,
|
||||
IncomingRequest { user_id, avatar_url: None } if user_id == "@foo:bar.org"
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ markdown = ["ruma-events/markdown"]
|
||||
#
|
||||
# For example, some mandatory string fields are defaulted to an empty string if
|
||||
# missing with this feature.
|
||||
compat = ["ruma-common/compat", "ruma-events/compat"]
|
||||
compat = ["ruma-common/compat", "ruma-events/compat", "ruma-client-api/compat"]
|
||||
|
||||
# unstable: by using any of these, you opt out of all semver guarantees Ruma
|
||||
# otherwise provides!
|
||||
|
Loading…
x
Reference in New Issue
Block a user