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