diff --git a/src/ecs/entity.rs b/src/ecs/entity.rs index c07fc1e..8a4ed32 100644 --- a/src/ecs/entity.rs +++ b/src/ecs/entity.rs @@ -116,7 +116,12 @@ impl TryFrom for Entity { type Error = (); #[inline] fn try_from(component: Component) -> Result { - Self::from_bits(component.to_bits()).ok_or(()) + if component.is_entity() { + // SAFETY: If component is valid and an entity, bitwise conversion is valid. + Ok(unsafe { Self::from_bits_unchecked(component.to_bits()) }) + } else { + Err(()) + } } } diff --git a/src/ecs/relation.rs b/src/ecs/relation.rs index 767ccc1..742afc6 100644 --- a/src/ecs/relation.rs +++ b/src/ecs/relation.rs @@ -98,7 +98,12 @@ impl TryFrom for Relation { type Error = (); #[inline] fn try_from(component: Component) -> Result { - Self::from_bits(component.to_bits()).ok_or(()) + if component.is_relation() { + // SAFETY: If component is valid and a relation, bitwise conversion is valid. + Ok(unsafe { Self::from_bits_unchecked(component.to_bits()) }) + } else { + Err(()) + } } }