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. * Change `r0::session::get_login_types::LoginType` to a non-exhaustive enum of structs.
* Move `r0::receipt::ReceiptType` to the `ruma-common` crate
Improvements: 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) //! [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_api::ruma_api;
use ruma_common::receipt::ReceiptType;
use ruma_identifiers::{EventId, RoomId}; use ruma_identifiers::{EventId, RoomId};
use ruma_serde::{AsRefStr, DisplayAsRefStr, FromString};
ruma_api! { ruma_api! {
metadata: { metadata: {
@ -47,14 +47,3 @@ impl Response {
Self 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] # [unreleased]
Improvements:
* Add `receipt::ReceiptType`
# 0.5.0 # 0.5.0
Breaking changes: Breaking changes:

View File

@ -11,4 +11,5 @@ pub mod encryption;
pub mod power_levels; pub mod power_levels;
pub mod presence; pub mod presence;
pub mod push; pub mod push;
pub mod receipt;
pub mod thirdparty; 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` * Add `tag::TagName` type and use it for `tag::Tags`
* Move `FullyRead` from `EphemeralRoom` enum to `Basic` enum * Move `FullyRead` from `EphemeralRoom` enum to `Basic` enum
* Change `receipt::Receipts` struct to a `BTreeMap<ReceiptType, UserReceipts>`
Improvements: Improvements:

View File

@ -6,6 +6,7 @@ use std::{
time::SystemTime, time::SystemTime,
}; };
use ruma_common::receipt::ReceiptType;
use ruma_events_macros::EphemeralRoomEventContent; use ruma_events_macros::EphemeralRoomEventContent;
use ruma_identifiers::{EventId, UserId}; use ruma_identifiers::{EventId, UserId};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -38,12 +39,7 @@ impl DerefMut for ReceiptEventContent {
} }
/// A collection of receipts. /// A collection of receipts.
#[derive(Clone, Debug, Deserialize, Serialize)] pub type Receipts = BTreeMap<ReceiptType, UserReceipts>;
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>,
}
/// A mapping of user ID to receipt. /// A mapping of user ID to receipt.
/// ///

View File

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