identifiers: Add more conversions for RoomOrAliasId

This commit is contained in:
Jonas Platte 2021-11-26 17:50:29 +01:00
parent 2a2028f1a7
commit 6c48926649
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -84,6 +84,18 @@ enum Variant {
RoomAliasId,
}
impl<'a> From<&'a RoomId> for &'a RoomOrAliasId {
fn from(room_id: &'a RoomId) -> Self {
RoomOrAliasId::from_borrowed(room_id.as_str())
}
}
impl<'a> From<&'a RoomAliasId> for &'a RoomOrAliasId {
fn from(room_alias_id: &'a RoomAliasId) -> Self {
RoomOrAliasId::from_borrowed(room_alias_id.as_str())
}
}
impl From<Box<RoomId>> for Box<RoomOrAliasId> {
fn from(room_id: Box<RoomId>) -> Self {
RoomOrAliasId::from_owned(room_id.into_owned())
@ -96,6 +108,28 @@ impl From<Box<RoomAliasId>> for Box<RoomOrAliasId> {
}
}
impl<'a> TryFrom<&'a RoomOrAliasId> for &'a RoomId {
type Error = &'a RoomAliasId;
fn try_from(id: &'a RoomOrAliasId) -> Result<&'a RoomId, &'a RoomAliasId> {
match id.variant() {
Variant::RoomId => Ok(RoomId::from_borrowed(id.as_str())),
Variant::RoomAliasId => Err(RoomAliasId::from_borrowed(id.as_str())),
}
}
}
impl<'a> TryFrom<&'a RoomOrAliasId> for &'a RoomAliasId {
type Error = &'a RoomId;
fn try_from(id: &'a RoomOrAliasId) -> Result<&'a RoomAliasId, &'a RoomId> {
match id.variant() {
Variant::RoomAliasId => Ok(RoomAliasId::from_borrowed(id.as_str())),
Variant::RoomId => Err(RoomId::from_borrowed(id.as_str())),
}
}
}
impl TryFrom<Box<RoomOrAliasId>> for Box<RoomId> {
type Error = Box<RoomAliasId>;