common: Clarify that reactions are not all emojis

According to MSC2677
This commit is contained in:
Kévin Commaille 2022-03-13 12:59:05 +01:00 committed by Jonas Platte
parent f0c8703ee5
commit 2d88df7fb7
3 changed files with 17 additions and 13 deletions

View File

@ -354,10 +354,10 @@ impl AnyMessageLikeEventContent {
Self::Reaction(ev) => { Self::Reaction(ev) => {
use super::reaction; use super::reaction;
let reaction::Relation { event_id, emoji } = &ev.relates_to; let reaction::Relation { event_id, key } = &ev.relates_to;
Some(encrypted::Relation::Annotation(encrypted::Annotation { Some(encrypted::Relation::Annotation(encrypted::Annotation {
event_id: event_id.clone(), event_id: event_id.clone(),
key: emoji.clone(), key: key.clone(),
})) }))
} }
Self::RoomEncrypted(ev) => ev.relates_to.clone(), Self::RoomEncrypted(ev) => ev.relates_to.clone(),

View File

@ -32,23 +32,27 @@ impl From<Relation> for ReactionEventContent {
} }
} }
/// The relation that contains info which event the reaction is applying to. /// Information about an annotation relation.
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[serde(tag = "rel_type", rename = "m.annotation")] #[serde(tag = "rel_type", rename = "m.annotation")]
pub struct Relation { pub struct Relation {
/// The event that is being reacted to. /// The event that is being annoted.
pub event_id: Box<EventId>, pub event_id: Box<EventId>,
/// A string that holds the emoji reaction. /// A string that indicates the annotation being applied.
#[serde(rename = "key")] ///
pub emoji: String, /// When sending emoji reactions, this field should include the colourful variation-16 when
/// applicable.
///
/// Clients should render reactions that have a long `key` field in a sensible manner.
pub key: String,
} }
impl Relation { impl Relation {
/// Creates a new `Relation` with the given event ID and emoji. /// Creates a new `Relation` with the given event ID and key.
pub fn new(event_id: Box<EventId>, emoji: String) -> Self { pub fn new(event_id: Box<EventId>, key: String) -> Self {
Self { event_id, emoji } Self { event_id, key }
} }
} }
@ -74,8 +78,8 @@ mod tests {
assert_matches!( assert_matches!(
from_json_value::<ReactionEventContent>(json).unwrap(), from_json_value::<ReactionEventContent>(json).unwrap(),
ReactionEventContent { relates_to: Relation { event_id, emoji } } ReactionEventContent { relates_to: Relation { event_id, key } }
if event_id == ev_id && emoji == "🦛" if event_id == ev_id && key == "🦛"
); );
} }
} }

View File

@ -12,7 +12,7 @@ use crate::{EventId, MilliSecondsSinceUnixEpoch, UserId};
#[cfg(feature = "unstable-msc2677")] #[cfg(feature = "unstable-msc2677")]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct BundledReaction { pub struct BundledReaction {
/// The key (emoji) used for reaction. /// The key used for the reaction.
pub key: String, pub key: String,
/// Time of the bundled reaction being compiled on the server. /// Time of the bundled reaction being compiled on the server.