هل يستحق تنفيذ trait Deref للأنواع الجديدة (newtypes) في Rust؟
مرحباً بالجميع! لقد بدأت مؤخراً في تعلم Rust وواجهت سؤالاً مثيراً للاهتمام حول تصميم الكود. غالباً ما أقوم بإنشاء أغلفة (wrappers) للأنواع الموجودة لإضافة دلالات أو تقييد الوظائف. على سبيل المثال، لدي نوع `UserId` الذي يخزن داخلياً `u64`:
```rust
struct UserId(u64);
```
أريد أن يكون العمل مع `UserId` مشابهاً للعمل مع `u64` (المقارنة، الطباعة، النسخ). يمكنني بالطبع تنفيذ trait `Display` أو `PartialEq` يدوياً، لكن هذا يتطلب الكثير من الكود.
ومع ذلك، صادفت نمطاً برمجياً حيث يتم تنفيذ trait `Deref` لهذه الأنواع الجديدة:
```rust
use std::ops::Deref;
impl Deref for UserId {
type Target = u64;
fn deref(&self) -> &u64 {
&self.0
}
}
```
الآن يمكنني استدعاء دوال `u64` مباشرة على `UserId`، وهو