ruma_events/room/
avatar.rs1use js_int::UInt;
6use ruma_common::OwnedMxcUri;
7use ruma_macros::EventContent;
8use serde::{Deserialize, Serialize};
9
10use super::ThumbnailInfo;
11use crate::EmptyStateKey;
12
13#[derive(Clone, Debug, Default, Deserialize, Serialize, EventContent)]
19#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
20#[ruma_event(type = "m.room.avatar", kind = State, state_key_type = EmptyStateKey)]
21pub struct RoomAvatarEventContent {
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub info: Option<Box<ImageInfo>>,
25
26 pub url: Option<OwnedMxcUri>,
28}
29
30impl RoomAvatarEventContent {
31 pub fn new() -> Self {
33 Self::default()
34 }
35}
36
37#[derive(Clone, Debug, Default, Deserialize, Serialize)]
39#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
40pub struct ImageInfo {
41 #[serde(rename = "h", skip_serializing_if = "Option::is_none")]
43 pub height: Option<UInt>,
44
45 #[serde(rename = "w", skip_serializing_if = "Option::is_none")]
47 pub width: Option<UInt>,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub mimetype: Option<String>,
52
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub size: Option<UInt>,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub thumbnail_info: Option<Box<ThumbnailInfo>>,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub thumbnail_url: Option<OwnedMxcUri>,
64
65 #[cfg(feature = "unstable-msc2448")]
70 #[serde(rename = "xyz.amorgan.blurhash", skip_serializing_if = "Option::is_none")]
71 pub blurhash: Option<String>,
72}
73
74impl ImageInfo {
75 pub fn new() -> Self {
77 Self::default()
78 }
79}