From 9faa8b8f530f3640e1a604a4888cc3fa7beafd5f Mon Sep 17 00:00:00 2001
From: HampusM <hampus@hampusmat.com>
Date: Mon, 7 Apr 2025 19:19:31 +0200
Subject: refactor(ecs): remove TypeName trait

---
 ecs/src/lock.rs | 90 ++++++++++++++++++++++++---------------------------------
 1 file changed, 37 insertions(+), 53 deletions(-)

(limited to 'ecs/src/lock.rs')

diff --git a/ecs/src/lock.rs b/ecs/src/lock.rs
index d6ed40e..9293710 100644
--- a/ecs/src/lock.rs
+++ b/ecs/src/lock.rs
@@ -9,23 +9,21 @@ use parking_lot::{
     RwLockWriteGuard,
 };
 
-use crate::type_name::TypeName;
-
-#[derive(Debug, Default)]
+#[derive(Debug)]
 pub struct Lock<Value>
-where
-    Value: TypeName,
 {
     inner: RwLock<Value>,
+    value_type_name: &'static str,
 }
 
 impl<Value> Lock<Value>
-where
-    Value: TypeName,
 {
-    pub fn new(value: Value) -> Self
+    pub fn new(value: Value, value_type_name: &'static str) -> Self
     {
-        Self { inner: RwLock::new(value) }
+        Self {
+            inner: RwLock::new(value),
+            value_type_name,
+        }
     }
 
     /// Tries to a acquire a handle to the resource with read access.
@@ -36,9 +34,12 @@ where
     {
         let guard = self.inner.try_read().ok_or(Error::ReadUnavailable)?;
 
-        tracing::trace!("Acquired lock to value of type {}", guard.type_name());
+        tracing::trace!("Acquired lock to value of type {}", self.value_type_name);
 
-        Ok(ReadGuard { inner: guard })
+        Ok(ReadGuard {
+            inner: guard,
+            value_type_name: self.value_type_name,
+        })
     }
 
     /// Tries to a acquire a handle to the resource with mutable access.
@@ -51,10 +52,13 @@ where
 
         tracing::trace!(
             "Acquired mutable lock to value of type {}",
-            guard.type_name()
+            self.value_type_name
         );
 
-        Ok(WriteGuard { inner: guard })
+        Ok(WriteGuard {
+            inner: guard,
+            value_type_name: self.value_type_name,
+        })
     }
 
     pub fn into_inner(self) -> Value
@@ -75,23 +79,20 @@ pub enum Error
 
 #[derive(Debug)]
 pub struct ReadGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     inner: RwLockReadGuard<'guard, Value>,
+    value_type_name: &'static str,
 }
 
 impl<'guard, Value> ReadGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     pub fn map<NewValue>(
         self,
         func: impl FnOnce(&Value) -> &NewValue,
     ) -> MappedReadGuard<'guard, NewValue>
-    where
-        NewValue: TypeName,
     {
+        let value_type_name = self.value_type_name;
+
         // The 'inner' field cannot be moved out of ReadGuard in a normal way since
         // ReadGuard implements Drop
         let inner = unsafe { std::ptr::read(&self.inner) };
@@ -99,13 +100,12 @@ where
 
         MappedReadGuard {
             inner: RwLockReadGuard::map(inner, func),
+            value_type_name,
         }
     }
 }
 
 impl<Value> Deref for ReadGuard<'_, Value>
-where
-    Value: TypeName,
 {
     type Target = Value;
 
@@ -116,26 +116,21 @@ where
 }
 
 impl<Value> Drop for ReadGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn drop(&mut self)
     {
-        tracing::trace!("Dropped lock to value of type {}", self.type_name());
+        tracing::trace!("Dropped lock to value of type {}", self.value_type_name);
     }
 }
 
 #[derive(Debug)]
 pub struct MappedReadGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     inner: MappedRwLockReadGuard<'guard, Value>,
+    value_type_name: &'static str,
 }
 
 impl<Value> Deref for MappedReadGuard<'_, Value>
-where
-    Value: TypeName,
 {
     type Target = Value;
 
@@ -146,34 +141,32 @@ where
 }
 
 impl<Value> Drop for MappedReadGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn drop(&mut self)
     {
-        tracing::trace!("Dropped mapped lock to value of type {}", self.type_name());
+        tracing::trace!(
+            "Dropped mapped lock to value of type {}",
+            self.value_type_name
+        );
     }
 }
 
 #[derive(Debug)]
 pub struct WriteGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     inner: RwLockWriteGuard<'guard, Value>,
+    value_type_name: &'static str,
 }
 
 impl<'guard, Value> WriteGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     pub fn map<NewValue>(
         self,
         func: impl FnOnce(&mut Value) -> &mut NewValue,
     ) -> MappedWriteGuard<'guard, NewValue>
-    where
-        NewValue: TypeName,
     {
+        let value_type_name = self.value_type_name;
+
         // The 'inner' field cannot be moved out of ReadGuard in a normal way since
         // ReadGuard implements Drop
         let inner = unsafe { std::ptr::read(&self.inner) };
@@ -181,13 +174,12 @@ where
 
         MappedWriteGuard {
             inner: RwLockWriteGuard::map(inner, func),
+            value_type_name,
         }
     }
 }
 
 impl<Value> Deref for WriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     type Target = Value;
 
@@ -198,8 +190,6 @@ where
 }
 
 impl<Value> DerefMut for WriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn deref_mut(&mut self) -> &mut Self::Target
     {
@@ -208,26 +198,24 @@ where
 }
 
 impl<Value> Drop for WriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn drop(&mut self)
     {
-        tracing::trace!("Dropped mutable lock to value of type {}", self.type_name());
+        tracing::trace!(
+            "Dropped mutable lock to value of type {}",
+            self.value_type_name
+        );
     }
 }
 
 #[derive(Debug)]
 pub struct MappedWriteGuard<'guard, Value>
-where
-    Value: TypeName,
 {
     inner: MappedRwLockWriteGuard<'guard, Value>,
+    value_type_name: &'static str,
 }
 
 impl<Value> Deref for MappedWriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     type Target = Value;
 
@@ -238,8 +226,6 @@ where
 }
 
 impl<Value> DerefMut for MappedWriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn deref_mut(&mut self) -> &mut Self::Target
     {
@@ -248,14 +234,12 @@ where
 }
 
 impl<Value> Drop for MappedWriteGuard<'_, Value>
-where
-    Value: TypeName,
 {
     fn drop(&mut self)
     {
         tracing::trace!(
             "Dropped mapped mutable lock to value of type {}",
-            self.type_name()
+            self.value_type_name
         );
     }
 }
-- 
cgit v1.2.3-18-g5258