هل يستحق تنفيذ 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`، وهو