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.
|
* 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:
|
||||||
|
|
||||||
|
@ -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),
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
|
Improvements:
|
||||||
|
|
||||||
|
* Add `receipt::ReceiptType`
|
||||||
|
|
||||||
# 0.5.0
|
# 0.5.0
|
||||||
|
|
||||||
Breaking changes:
|
Breaking changes:
|
||||||
|
@ -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;
|
||||||
|
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`
|
* 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:
|
||||||
|
|
||||||
|
@ -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.
|
||||||
///
|
///
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user