client-api: Don't require the failures field in the signatures upload response

The field is not marked as required in the spec[1] and at least one homeserver, namely Dendrite, omits the field if it's empty.

[1]: https://spec.matrix.org/unstable/client-server-api/#post_matrixclientv3keyssignaturesupload
This commit is contained in:
Damir Jelić 2024-02-22 16:17:44 +01:00 committed by GitHub
parent 4d9f754657
commit b8768c3f19
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 4 deletions

View File

@ -1,5 +1,10 @@
# [unreleased]
Bug fixes:
- Don't require the `failures` field in the
`ruma_client_api::keys::upload_signatures::Response` type.
Breaking changes:
- The conversion from `PushRule` to `ConditionalPushRule` is infallible since

View File

@ -45,6 +45,7 @@ pub mod v3 {
#[derive(Default)]
pub struct Response {
/// Signature processing failures.
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub failures: BTreeMap<OwnedUserId, BTreeMap<String, Failure>>,
}
@ -117,14 +118,17 @@ pub mod v3 {
_Custom(PrivOwnedStr),
}
#[cfg(all(test, feature = "client", feature = "compat-upload-signatures"))]
#[cfg(all(test, feature = "client"))]
mod tests {
use ruma_common::user_id;
use super::{FailureErrorCode, ResponseBody};
use super::ResponseBody;
#[cfg(feature = "compat-upload-signatures")]
#[test]
fn deserialize_synapse_response() {
use ruma_common::user_id;
use super::FailureErrorCode;
const JSON: &str = r#"{
"failures": {
"@richvdh:sw1v.org": {
@ -142,6 +146,14 @@ pub mod v3 {
assert_eq!(failure.errcode, FailureErrorCode::InvalidSignature);
assert_eq!(failure.error, "400: Invalid signature");
}
#[test]
fn deserialize_empty_response() {
const JSON: &str = r#"{}"#;
let _parsed: ResponseBody = serde_json::from_str(JSON)
.expect("We should be able to deserialize an empty keys/signatures/upload");
}
}
}