common: Add support for private read receipts
According to MSC2285
This commit is contained in:
		
							parent
							
								
									2f96fa5548
								
							
						
					
					
						commit
						635480796d
					
				@ -25,6 +25,7 @@ Breaking changes:
 | 
				
			|||||||
* Make identifiers matrix URI constructors generic over owned parameters
 | 
					* Make identifiers matrix URI constructors generic over owned parameters
 | 
				
			||||||
  * Split `RoomId` matrix URI constructors between methods with and without routing
 | 
					  * Split `RoomId` matrix URI constructors between methods with and without routing
 | 
				
			||||||
* Allow to add routing servers to `RoomId::matrix_to_event_uri()`
 | 
					* Allow to add routing servers to `RoomId::matrix_to_event_uri()`
 | 
				
			||||||
 | 
					* Move `receipt::ReceiptType` to `events::receipt`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[spec]: https://github.com/matrix-org/matrix-spec-proposals/pull/3669
 | 
					[spec]: https://github.com/matrix-org/matrix-spec-proposals/pull/3669
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -46,6 +47,7 @@ Improvements:
 | 
				
			|||||||
  * Can also remove rich reply fallbacks
 | 
					  * Can also remove rich reply fallbacks
 | 
				
			||||||
* Implement `From<Owned*Id>` for `identifiers::matrix_uri::MatrixId`
 | 
					* Implement `From<Owned*Id>` for `identifiers::matrix_uri::MatrixId`
 | 
				
			||||||
* Add unstable default push rule to ignore room server ACLs events (MSC3786)
 | 
					* Add unstable default push rule to ignore room server ACLs events (MSC3786)
 | 
				
			||||||
 | 
					* Add unstable support for private read receipts (MSC2285)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 0.9.2
 | 
					# 0.9.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ unstable-pdu = []
 | 
				
			|||||||
unstable-pre-spec = []
 | 
					unstable-pre-spec = []
 | 
				
			||||||
unstable-sanitize = ["html5ever", "phf"]
 | 
					unstable-sanitize = ["html5ever", "phf"]
 | 
				
			||||||
unstable-msc1767 = []
 | 
					unstable-msc1767 = []
 | 
				
			||||||
 | 
					unstable-msc2285 = []
 | 
				
			||||||
unstable-msc2448 = []
 | 
					unstable-msc2448 = []
 | 
				
			||||||
unstable-msc2676 = []
 | 
					unstable-msc2676 = []
 | 
				
			||||||
unstable-msc2677 = []
 | 
					unstable-msc2677 = []
 | 
				
			||||||
 | 
				
			|||||||
@ -7,19 +7,15 @@ use std::{
 | 
				
			|||||||
    ops::{Deref, DerefMut},
 | 
					    ops::{Deref, DerefMut},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use ruma_macros::EventContent;
 | 
					use ruma_macros::{EventContent, OrdAsRefStr, PartialEqAsRefStr, PartialOrdAsRefStr, StringEnum};
 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{
 | 
					use crate::{EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, PrivOwnedStr, UserId};
 | 
				
			||||||
    receipt::ReceiptType, EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, UserId,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// The content of an `m.receipt` event.
 | 
					/// The content of an `m.receipt` event.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// A mapping of event ID to a collection of receipts for this event ID. The event ID is the ID of
 | 
					/// A mapping of event ID to a collection of receipts for this event ID. The event ID is the ID of
 | 
				
			||||||
/// the event being acknowledged and *not* an ID for the receipt itself.
 | 
					/// the event being acknowledged and *not* an ID for the receipt itself.
 | 
				
			||||||
///
 | 
					 | 
				
			||||||
/// Informs the client who has read a message specified by it's event id.
 | 
					 | 
				
			||||||
#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
 | 
					#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
 | 
				
			||||||
#[allow(clippy::exhaustive_structs)]
 | 
					#[allow(clippy::exhaustive_structs)]
 | 
				
			||||||
#[ruma_event(type = "m.receipt", kind = EphemeralRoom)]
 | 
					#[ruma_event(type = "m.receipt", kind = EphemeralRoom)]
 | 
				
			||||||
@ -56,6 +52,45 @@ impl DerefMut for ReceiptEventContent {
 | 
				
			|||||||
/// A collection of receipts.
 | 
					/// A collection of receipts.
 | 
				
			||||||
pub type Receipts = BTreeMap<ReceiptType, UserReceipts>;
 | 
					pub type Receipts = BTreeMap<ReceiptType, UserReceipts>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// The type of receipt.
 | 
				
			||||||
 | 
					#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
 | 
				
			||||||
 | 
					#[derive(Clone, Debug, PartialOrdAsRefStr, OrdAsRefStr, PartialEqAsRefStr, Eq, StringEnum)]
 | 
				
			||||||
 | 
					#[non_exhaustive]
 | 
				
			||||||
 | 
					pub enum ReceiptType {
 | 
				
			||||||
 | 
					    /// A [public read receipt].
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// Indicates that the given event has been presented to the user. It is
 | 
				
			||||||
 | 
					    /// also the point from where the unread notifications count is computed.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// This receipt is federated to other users.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// If both `Read` and `ReadPrivate` are present, the one that references
 | 
				
			||||||
 | 
					    /// the most recent event is used to get the latest read receipt.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// [public read receipt]: https://spec.matrix.org/v1.3/client-server-api/#receipts
 | 
				
			||||||
 | 
					    #[ruma_enum(rename = "m.read")]
 | 
				
			||||||
 | 
					    Read,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// A [private read receipt].
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// Indicates that the given event has been presented to the user. It is
 | 
				
			||||||
 | 
					    /// also the point from where the unread notifications count is computed.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// This read receipt is not federated so only the user and their homeserver
 | 
				
			||||||
 | 
					    /// are aware of it.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// If both `Read` and `ReadPrivate` are present, the one that references
 | 
				
			||||||
 | 
					    /// the most recent event is used to get the latest read receipt.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// [private read receipt]: https://github.com/matrix-org/matrix-spec-proposals/pull/2285
 | 
				
			||||||
 | 
					    #[cfg(feature = "unstable-msc2285")]
 | 
				
			||||||
 | 
					    #[ruma_enum(rename = "org.matrix.msc2285.read.private", alias = "m.read.private")]
 | 
				
			||||||
 | 
					    ReadPrivate,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[doc(hidden)]
 | 
				
			||||||
 | 
					    _Custom(PrivOwnedStr),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A mapping of user ID to receipt.
 | 
					/// A mapping of user ID to receipt.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// The user ID is the entity who sent this receipt.
 | 
					/// The user ID is the entity who sent this receipt.
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,9 @@
 | 
				
			|||||||
use assert_matches::assert_matches;
 | 
					use assert_matches::assert_matches;
 | 
				
			||||||
use js_int::uint;
 | 
					use js_int::uint;
 | 
				
			||||||
use maplit::btreemap;
 | 
					use maplit::btreemap;
 | 
				
			||||||
use ruma_common::{event_id, receipt::ReceiptType, room_id, user_id, MilliSecondsSinceUnixEpoch};
 | 
					use ruma_common::{
 | 
				
			||||||
 | 
					    event_id, events::receipt::ReceiptType, room_id, user_id, MilliSecondsSinceUnixEpoch,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
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_common::events::{
 | 
					use ruma_common::events::{
 | 
				
			||||||
 | 
				
			|||||||
@ -118,6 +118,7 @@ unstable-pre-spec = [
 | 
				
			|||||||
unstable-sanitize = ["ruma-common/unstable-sanitize"]
 | 
					unstable-sanitize = ["ruma-common/unstable-sanitize"]
 | 
				
			||||||
unstable-msc1767 = ["ruma-common/unstable-msc1767"]
 | 
					unstable-msc1767 = ["ruma-common/unstable-msc1767"]
 | 
				
			||||||
unstable-msc2246 = ["ruma-client-api?/unstable-msc2246"]
 | 
					unstable-msc2246 = ["ruma-client-api?/unstable-msc2246"]
 | 
				
			||||||
 | 
					unstable-msc2285 = ["ruma-common/unstable-msc2285"]
 | 
				
			||||||
unstable-msc2448 = [
 | 
					unstable-msc2448 = [
 | 
				
			||||||
    "ruma-client-api?/unstable-msc2448",
 | 
					    "ruma-client-api?/unstable-msc2448",
 | 
				
			||||||
    "ruma-common/unstable-msc2448",
 | 
					    "ruma-common/unstable-msc2448",
 | 
				
			||||||
@ -160,6 +161,7 @@ __ci = [
 | 
				
			|||||||
    "unstable-pre-spec",
 | 
					    "unstable-pre-spec",
 | 
				
			||||||
    "unstable-sanitize",
 | 
					    "unstable-sanitize",
 | 
				
			||||||
    "unstable-msc1767",
 | 
					    "unstable-msc1767",
 | 
				
			||||||
 | 
					    "unstable-msc2285",
 | 
				
			||||||
    "unstable-msc2448",
 | 
					    "unstable-msc2448",
 | 
				
			||||||
    "unstable-msc2666",
 | 
					    "unstable-msc2666",
 | 
				
			||||||
    "unstable-msc2654",
 | 
					    "unstable-msc2654",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user