¿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