events: Change receipt::Receipts struct to a BTreeMap<ReceiptType, UserReceipts>

This commit is contained in:
Kévin Commaille 2021-05-10 15:48:17 +02:00 committed by Jonas Platte
parent 91a7325bc4
commit 6a2c028cfb
8 changed files with 30 additions and 23 deletions

View File

@ -80,6 +80,7 @@ Breaking changes:
}
```
* Change `r0::session::get_login_types::LoginType` to a non-exhaustive enum of structs.
* Move `r0::receipt::ReceiptType` to the `ruma-common` crate
Improvements:

View File

@ -1,8 +1,8 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/receipt/{receiptType}/{eventId}](https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid)
use ruma_api::ruma_api;
use ruma_common::receipt::ReceiptType;
use ruma_identifiers::{EventId, RoomId};
use ruma_serde::{AsRefStr, DisplayAsRefStr, FromString};
ruma_api! {
metadata: {
@ -47,14 +47,3 @@ impl Response {
Self
}
}
/// The type of receipt.
#[derive(Clone, Debug, AsRefStr, DisplayAsRefStr, FromString)]
pub enum ReceiptType {
/// m.read
#[ruma_enum(rename = "m.read")]
Read,
#[doc(hidden)]
_Custom(String),
}

View File

@ -1,5 +1,9 @@
# [unreleased]
Improvements:
* Add `receipt::ReceiptType`
# 0.5.0
Breaking changes:

View File

@ -11,4 +11,5 @@ pub mod encryption;
pub mod power_levels;
pub mod presence;
pub mod push;
pub mod receipt;
pub mod thirdparty;

View File

@ -0,0 +1,14 @@
//! Common types for receipts.
use ruma_serde::StringEnum;
/// The type of receipt.
#[derive(Clone, Debug, PartialOrd, Ord, PartialEq, Eq, StringEnum)]
pub enum ReceiptType {
/// m.read
#[ruma_enum(rename = "m.read")]
Read,
#[doc(hidden)]
_Custom(String),
}

View File

@ -42,6 +42,7 @@ Breaking changes:
```
* Add `tag::TagName` type and use it for `tag::Tags`
* Move `FullyRead` from `EphemeralRoom` enum to `Basic` enum
* Change `receipt::Receipts` struct to a `BTreeMap<ReceiptType, UserReceipts>`
Improvements:

View File

@ -6,6 +6,7 @@ use std::{
time::SystemTime,
};
use ruma_common::receipt::ReceiptType;
use ruma_events_macros::EphemeralRoomEventContent;
use ruma_identifiers::{EventId, UserId};
use serde::{Deserialize, Serialize};
@ -38,12 +39,7 @@ impl DerefMut for ReceiptEventContent {
}
/// A collection of receipts.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Receipts {
/// A collection of users who have sent *m.read* receipts for this event.
#[serde(default, rename = "m.read")]
pub read: Option<UserReceipts>,
}
pub type Receipts = BTreeMap<ReceiptType, UserReceipts>;
/// A mapping of user ID to receipt.
///

View File

@ -2,12 +2,13 @@ use std::time::{Duration, UNIX_EPOCH};
use maplit::btreemap;
use matches::assert_matches;
use ruma_common::receipt::ReceiptType;
use ruma_identifiers::{event_id, room_id, user_id};
use ruma_serde::Raw;
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
use ruma_events::{
receipt::{Receipt, ReceiptEventContent, Receipts},
receipt::{Receipt, ReceiptEventContent},
typing::TypingEventContent,
AnyEphemeralRoomEventContent, EphemeralRoomEvent,
};
@ -63,10 +64,10 @@ fn ephemeral_serialize_receipt() {
let aliases_event = EphemeralRoomEvent {
content: AnyEphemeralRoomEventContent::Receipt(ReceiptEventContent(btreemap! {
event_id => Receipts {
read: Some(btreemap! {
event_id => btreemap! {
ReceiptType::Read => btreemap! {
user_id => Receipt { ts: Some(UNIX_EPOCH + Duration::from_millis(1)) },
}),
},
},
})),
room_id: room_id!("!roomid:room.com"),
@ -117,7 +118,7 @@ fn deserialize_ephemeral_receipt() {
&& room_id == room_id!("!roomid:room.com")
&& receipts
.get(&event_id)
.map(|r| r.read.as_ref().unwrap().get(&user_id).unwrap())
.map(|r| r.get(&ReceiptType::Read).unwrap().get(&user_id).unwrap())
.map(|r| r.ts)
.unwrap()
== Some(UNIX_EPOCH + Duration::from_millis(1))