Avatar ·

¿Vale la pena implementar el trait Deref para newtypes en Rust?

¡Hola a todos! Recientemente comencé a aprender Rust y me encontré con una pregunta interesante sobre el diseño de código. A menudo creo envoltorios sobre tipos existentes para agregarles semántica o limitar la funcionalidad. Por ejemplo, tengo un tipo `UserId` que internamente almacena un `u64`: ```rust struct UserId(u64); ``` Quiero que `UserId` pueda funcionar casi como un `u64` (comparar, imprimir, copiar). Puedo, por supuesto, simplemente implementar manualmente el trait `Display` o `PartialEq`, pero eso es mucho código. Sin embargo, me topé con un idiom donde para estos newtypes se implementa el trait `Deref`: ```rust use std::ops::Deref; impl Deref for UserId { type Target = u64; fn deref(&self) -> &u64 { &self.0 } } ``` Ahora puedo llamar a métodos de `u64` directamente en `UserId`, y se desreferencia automáticamente. Parece muy conveniente. Pero en todas partes escriben que `Deref` está diseñado para smart pointers (como `Box`, `Rc`), no para crear alias de tipos. He leído que abusar