ruwuma/crates/ruma-events/src/poll/unstable_end.rs
Jonas Platte 31331f3165
Bring back ruma-events
Co-authored-by: Kévin Commaille <zecakeh@tedomum.fr>
2023-08-28 10:23:54 +02:00

58 lines
2.2 KiB
Rust

//! Types for the `org.matrix.msc3381.poll.end` event, the unstable version of `m.poll.end`.
use ruma_common::OwnedEventId;
use ruma_macros::EventContent;
use serde::{Deserialize, Serialize};
use crate::relation::Reference;
/// The payload for an unstable poll end event.
///
/// This type can be generated from the unstable poll start and poll response events with
/// [`OriginalSyncUnstablePollStartEvent::compile_results()`].
///
/// This is the event content that should be sent for room versions that don't support extensible
/// events. As of Matrix 1.7, none of the stable room versions (1 through 10) support extensible
/// events.
///
/// To send a poll end event for a room version that supports extensible events, use
/// [`PollEndEventContent`].
///
/// [`OriginalSyncUnstablePollStartEvent::compile_results()`]: super::unstable_start::OriginalSyncUnstablePollStartEvent::compile_results
/// [`PollEndEventContent`]: super::end::PollEndEventContent
#[derive(Clone, Debug, Serialize, Deserialize, EventContent)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[ruma_event(type = "org.matrix.msc3381.poll.end", kind = MessageLike)]
pub struct UnstablePollEndEventContent {
/// The text representation of the results.
#[serde(rename = "org.matrix.msc1767.text")]
pub text: String,
/// The poll end content.
#[serde(default, rename = "org.matrix.msc3381.poll.end")]
pub poll_end: UnstablePollEndContentBlock,
/// Information about the poll start event this responds to.
#[serde(rename = "m.relates_to")]
pub relates_to: Reference,
}
impl UnstablePollEndEventContent {
/// Creates a new `PollEndEventContent` with the given fallback representation and
/// that responds to the given poll start event ID.
pub fn new(text: impl Into<String>, poll_start_id: OwnedEventId) -> Self {
Self {
text: text.into(),
poll_end: UnstablePollEndContentBlock {},
relates_to: Reference::new(poll_start_id),
}
}
}
/// A block for the results of a poll.
///
/// This is currently an empty struct.
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct UnstablePollEndContentBlock {}