Jonas Platte ee4280cea2
events: Allow the url in m.room.avatar to be null / missing
This isn't allowed in any version of the spec, but it's the only way to
unset an avatar and will have to be supported in the future.

C.f. https://github.com/matrix-org/matrix-doc/issues/2006
2020-11-23 14:18:41 +01:00

46 lines
1.3 KiB
Rust

//! Types for the *m.room.avatar* event.
use ruma_events_macros::StateEventContent;
use serde::{Deserialize, Serialize};
use super::ImageInfo;
use crate::StateEvent;
/// A picture that is associated with the room.
///
/// This can be displayed alongside the room information.
pub type AvatarEvent = StateEvent<AvatarEventContent>;
/// The payload for `AvatarEvent`.
#[derive(Clone, Debug, Deserialize, Serialize, StateEventContent)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
#[cfg_attr(feature = "unstable-pre-spec", derive(Default))]
#[ruma_event(type = "m.room.avatar")]
pub struct AvatarEventContent {
/// Information about the avatar image.
#[serde(skip_serializing_if = "Option::is_none")]
pub info: Option<Box<ImageInfo>>,
/// URL of the avatar image.
#[cfg(not(feature = "unstable-pre-spec"))]
pub url: String,
/// URL of the avatar image.
#[cfg(feature = "unstable-pre-spec")]
pub url: Option<String>,
}
impl AvatarEventContent {
/// Create an `AvatarEventContent` from the given image URL.
#[cfg(not(feature = "unstable-pre-spec"))]
pub fn new(url: String) -> Self {
Self { info: None, url }
}
/// Create an empty `AvatarEventContent`.
#[cfg(feature = "unstable-pre-spec")]
pub fn new() -> Self {
Self::default()
}
}