يتم إعطاؤك رمزًا هيكليًا لبنية بيانات رسم بياني عامة تسمى "GraphBase". تحتوي بنية البيانات هذه على حقلين: "العقد" و"الحواف".

حقل "العقد" عبارة عن متجه يحتوي على عناصر من النوع "N"، تمثل عقد الرسم البياني. يعد حقل "الحواف" أيضًا متجهًا يحتوي على عناصر من النوع "E"، تمثل حواف الرسم البياني.

مهمتك هي إكمال تنفيذ بنية `GraphBase` عن طريق إضافة الأساليب اللازمة لمعالجة الرسم البياني.

تحتاج إلى تنفيذ الطرق التالية:

1. `new()` - يجب أن تنشئ هذه الطريقة مثيلًا جديدًا لـ `GraphBase` مع `عقد` و`حواف` فارغة.

2. `add_node(&mut self,node: N)` - يجب أن تضيف هذه الطريقة عقدة جديدة إلى الرسم البياني.

3. `add_edge(&mut self, edge: E)` - يجب أن تضيف هذه الطريقة حافة جديدة إلى الرسم البياني.

4. `get_nodes(&self) -> &[N]` - يجب أن تُرجع هذه الطريقة مرجعًا إلى متجه العقد.

5. `get_edges(&self) -> &[E]` - يجب أن تُرجع هذه الطريقة مرجعًا إلى متجه الحواف.

6. `find_node(&self, العقدة: N) -> الخيار<&N>` - يجب أن تجد هذه الطريقة عقدة في الرسم البياني وترجع مرجعًا إليها إذا وجدت، أو `لا شيء' بخلاف ذلك.

7. `find_edge(&self, edge: E) -> Option<&E>` - يجب أن تجد هذه الطريقة حافة في الرسم البياني وترجع مرجعًا إليها إذا وجدت، أو `لا شيء' بخلاف ذلك.

يمكنك افتراض أن النوعين `N` و`E` يطبقان السمات الضرورية (`Debug`، `Clone`، `Hash`، `PartialEq`، `Eq`) ليتم تخزينها في المتجهات ومقارنتها.

أكمل الكود بتنفيذ الطرق المفقودة.
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}