use std::ops::{Deref, DerefMut};
use matrix_sdk::RoomDisplayName;
use serde::{Serialize, Serializer};
#[derive(Debug, Clone)]
pub struct FrontendRoomDisplayName(RoomDisplayName);
impl Deref for FrontendRoomDisplayName {
type Target = RoomDisplayName;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for FrontendRoomDisplayName {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl From<RoomDisplayName> for FrontendRoomDisplayName {
fn from(content: RoomDisplayName) -> Self {
FrontendRoomDisplayName(content)
}
}
impl Serialize for FrontendRoomDisplayName {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
use serde::ser::SerializeStruct;
let mut state = serializer.serialize_struct("RoomDisplayName", 2)?;
match &self.0 {
RoomDisplayName::Named(name) => {
state.serialize_field("kind", "named")?;
state.serialize_field("name", name)?;
}
RoomDisplayName::Aliased(name) => {
state.serialize_field("kind", "aliased")?;
state.serialize_field("name", name)?;
}
RoomDisplayName::Calculated(name) => {
state.serialize_field("kind", "calculated")?;
state.serialize_field("name", name)?;
}
RoomDisplayName::EmptyWas(name) => {
state.serialize_field("kind", "empty_was")?;
state.serialize_field("name", name)?;
}
RoomDisplayName::Empty => {
state.serialize_field("kind", "empty")?;
}
}
state.end()
}
}