Avatar ·

Vaut-il la peine d'implémenter le trait Deref pour les nouveaux types (newtypes) en Rust ?

Bonjour à tous ! J'ai récemment commencé à apprendre Rust et j'ai rencontré une question intéressante sur la conception de code. Je crée souvent des wrappers autour de types existants pour leur ajouter de la sémantique ou limiter les fonctionnalités. Par exemple, j'ai un type `UserId` qui stocke en interne un `u64` : ```rust struct UserId(u64); ``` Je veux pouvoir travailler avec `UserId` presque comme avec `u64` (comparer, afficher, copier). Je peux bien sûr implémenter manuellement les traits `Display` ou `PartialEq`, mais cela fait beaucoup de code. Cependant, je suis tombé sur un idiome où, pour ces nouveaux types, on implémente le trait `Deref` : ```rust use std::ops::Deref; impl Deref for UserId { type Target = u64; fn deref(&self) -> &u64 { &self.0 } } ``` Maintenant, je peux appeler les méthodes de `u64` directement sur `UserId`, et il se déréférence automatiquement. Cela semble très pratique. Mais partout, on dit que `Deref` est destiné aux pointeurs intelligents (comme `Box`, `Rc`), et non à la création d'alias de types. J'ai lu que l'abus