Serde لـ Rust: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو Serde ولماذا هو مطلوب

\n\n

Serde (اختصار لـ Serialization/Deserialization) هو إطار عمل للتسلسل وإلغاء التسلسل لهياكل البيانات في لغة Rust. وهو المعيار الفعلي للعمل مع تنسيقات البيانات في نظام Rust البيئي. تتيح المكتبة تحويل أنواع Rust المعقدة (الهياكل، التعدادات، المتجهات، جداول التجزئة) إلى تنسيقات نصية وثنائية مختلفة (JSON، YAML، TOML، BSON، MessagePack، CBOR، وغيرها الكثير) والعكس.

\n\n

الفلسفة الأساسية لـ Serde هي الأداء بدون تنازلات. فهي تستخدم نظام الماكرو القوي في Rust لتوليد كود عالي التحسين في مرحلة التجميع، مما يجعلها واحدة من أسرع مكتبات التسلسل بين جميع لغات البرمجة. Serde ليست مرتبطة بأي تنسيق محدد: فهي توفر السمات المجردة Serialize و Deserialize، بينما يتم تنفيذ التنسيقات المحددة في صناديق منفصلة (مثل serde_json، serde_yaml).

\n\n

لماذا نحتاج Serde؟

\n
    \n
  • حفظ الحالة: كتابة الإعدادات، حفظ اللعبة، ذاكرة التخزين المؤقت على القرص
  • \n
  • بروتوكولات الشبكة: تبادل البيانات بين العميل والخادم (REST API، WebSocket)
  • \n
  • ملفات الإعدادات: قراءة الإعدادات من JSON/YAML/TOML
  • \n
  • قواعد البيانات: تسلسل السجلات للتخزين في Redis و MongoDB وقواعد بيانات أخرى
  • \n
  • التواصل بين العمليات: نقل البيانات بين العمليات عبر الأنابيب أو المقابس
  • \n
\n\n

التثبيت

\n\n

يتم تثبيت Serde عبر مدير الحزم Cargo المدمج في Rust. للبدء، أضف التبعيات إلى ملف Cargo.toml:

\n\n
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

شرح التبعيات:

\n
    \n
  • serde — نواة المكتبة مع السمات Serialize و Deserialize. العلم features = ["derive"] يتضمن دعم الماكرو #[derive(Serialize, Deserialize)].
  • \n
  • serde_json — تنفيذ تنسيق JSON. وبالمثل، يتم تضمين serde_yaml و serde_toml و bincode وغيرها.
  • \n
\n\n

إذا كنت تعمل مع Rust 2021 edition أو أحدث، يكفي إضافة هذه الأسطر. لتثبيت إصدار معين، حدد الرقم، مثل serde_json = "1.0.128".

\n\n

بداية سريعة: المثال الأول

\n\n

لننشئ هيكلًا بسيطًا ونقوم بتسلسله إلى JSON، ثم إلغاء تسلسله مرة أخرى:

\n\n
use serde::{Deserialize, Serialize};\nuse serde_json;\n\n// هيكل مع توليد تلقائي لكود التسلسل/إلغاء التسلسل\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n    id: u32,\n    name: String,\n    email: String,\n    active: bool,\n}\n\nfn main() {\n    // إنشاء مثيل للهيكل\n    let user = User {\n        id: 42,\n        name: "أليس".to_string(),\n        email: "alice@example.com".to_string(),\n        active: true,\n    };\n\n    // التسلسل إلى سلسلة JSON\n    let json_string = serde_json::to_string(&user).unwrap();\n    println!("JSON المسلسل: {}", json_string);\n\n    // إلغاء التسلسل مرة أخرى إلى هيكل\n    let deserialized_user: User = serde_json::from_str(&json_string).unwrap();\n    println!("الهيكل بعد إلغاء التسلسل: {:?}", deserialized_user);\n\n    // التحقق من عدم فقدان البيانات\n    assert_eq!(user.id, deserialized_user.id);\n    assert_eq!(user.name, deserialized_user.name);\n}\n
\n\n

مخرجات البرنامج:

\n
JSON المسلسل: {"id":42,"name":"أليس","email":"alice@example.com","active":true}\nالهيكل بعد إلغاء التسلسل: User { id: 4                    

توصيات