identifiers: Remove runtime checks for RoomOrAliasId conversions

This commit is contained in:
Jonas Platte 2021-11-26 17:46:33 +01:00
parent 4132c43cbb
commit 2a2028f1a7
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67
2 changed files with 8 additions and 11 deletions

View File

@ -35,7 +35,7 @@ macro_rules! opaque_identifier_common_impls {
unsafe { Box::from_raw(Box::into_raw(s) as _) } unsafe { Box::from_raw(Box::into_raw(s) as _) }
} }
fn into_owned(self: Box<Self>) -> Box<str> { pub(super) fn into_owned(self: Box<Self>) -> Box<str> {
unsafe { Box::from_raw(Box::into_raw(self) as _) } unsafe { Box::from_raw(Box::into_raw(self) as _) }
} }

View File

@ -1,9 +1,6 @@
//! Matrix identifiers for places where a room ID or room alias ID are used interchangeably. //! Matrix identifiers for places where a room ID or room alias ID are used interchangeably.
use std::{ use std::{convert::TryFrom, hint::unreachable_unchecked};
convert::{TryFrom, TryInto},
hint::unreachable_unchecked,
};
use crate::{server_name::ServerName, RoomAliasId, RoomId}; use crate::{server_name::ServerName, RoomAliasId, RoomId};
@ -89,13 +86,13 @@ enum Variant {
impl From<Box<RoomId>> for Box<RoomOrAliasId> { impl From<Box<RoomId>> for Box<RoomOrAliasId> {
fn from(room_id: Box<RoomId>) -> Self { fn from(room_id: Box<RoomId>) -> Self {
Self::try_from(room_id.as_str()).unwrap() RoomOrAliasId::from_owned(room_id.into_owned())
} }
} }
impl From<Box<RoomAliasId>> for Box<RoomOrAliasId> { impl From<Box<RoomAliasId>> for Box<RoomOrAliasId> {
fn from(room_alias_id: Box<RoomAliasId>) -> Self { fn from(room_alias_id: Box<RoomAliasId>) -> Self {
Self::try_from(room_alias_id.as_str()).unwrap() RoomOrAliasId::from_owned(room_alias_id.into_owned())
} }
} }
@ -104,8 +101,8 @@ impl TryFrom<Box<RoomOrAliasId>> for Box<RoomId> {
fn try_from(id: Box<RoomOrAliasId>) -> Result<Box<RoomId>, Box<RoomAliasId>> { fn try_from(id: Box<RoomOrAliasId>) -> Result<Box<RoomId>, Box<RoomAliasId>> {
match id.variant() { match id.variant() {
Variant::RoomId => Ok(id.as_str().try_into().unwrap()), Variant::RoomId => Ok(RoomId::from_owned(id.into_owned())),
Variant::RoomAliasId => Err(id.as_str().try_into().unwrap()), Variant::RoomAliasId => Err(RoomAliasId::from_owned(id.into_owned())),
} }
} }
} }
@ -115,8 +112,8 @@ impl TryFrom<Box<RoomOrAliasId>> for Box<RoomAliasId> {
fn try_from(id: Box<RoomOrAliasId>) -> Result<Box<RoomAliasId>, Box<RoomId>> { fn try_from(id: Box<RoomOrAliasId>) -> Result<Box<RoomAliasId>, Box<RoomId>> {
match id.variant() { match id.variant() {
Variant::RoomAliasId => Ok(id.as_str().try_into().unwrap()), Variant::RoomAliasId => Ok(RoomAliasId::from_owned(id.into_owned())),
Variant::RoomId => Err(id.as_str().try_into().unwrap()), Variant::RoomId => Err(RoomId::from_owned(id.into_owned())),
} }
} }
} }