events: Change receipt::Receipts struct to a BTreeMap<ReceiptType, UserReceipts>
This commit is contained in:
parent
91a7325bc4
commit
6a2c028cfb
@ -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:
|
||||
|
||||
|
@ -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),
|
||||
}
|
||||
|
@ -1,5 +1,9 @@
|
||||
# [unreleased]
|
||||
|
||||
Improvements:
|
||||
|
||||
* Add `receipt::ReceiptType`
|
||||
|
||||
# 0.5.0
|
||||
|
||||
Breaking changes:
|
||||
|
@ -11,4 +11,5 @@ pub mod encryption;
|
||||
pub mod power_levels;
|
||||
pub mod presence;
|
||||
pub mod push;
|
||||
pub mod receipt;
|
||||
pub mod thirdparty;
|
||||
|
14
crates/ruma-common/src/receipt.rs
Normal file
14
crates/ruma-common/src/receipt.rs
Normal 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),
|
||||
}
|
@ -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:
|
||||
|
||||
|
@ -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.
|
||||
///
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user