ما هو Serde ولماذا هو مطلوب
\n\nSerde (اختصار لـ Serialization/Deserialization) هو إطار عمل للتسلسل وإلغاء التسلسل لهياكل البيانات في لغة Rust. وهو المعيار الفعلي للعمل مع تنسيقات البيانات في نظام Rust البيئي. تتيح المكتبة تحويل أنواع Rust المعقدة (الهياكل، التعدادات، المتجهات، جداول التجزئة) إلى تنسيقات نصية وثنائية مختلفة (JSON، YAML، TOML، BSON، MessagePack، CBOR، وغيرها الكثير) والعكس.
\n\nالفلسفة الأساسية لـ Serde هي الأداء بدون تنازلات. فهي تستخدم نظام الماكرو القوي في Rust لتوليد كود عالي التحسين في مرحلة التجميع، مما يجعلها واحدة من أسرع مكتبات التسلسل بين جميع لغات البرمجة. Serde ليست مرتبطة بأي تنسيق محدد: فهي توفر السمات المجردة Serialize و Deserialize، بينما يتم تنفيذ التنسيقات المحددة في صناديق منفصلة (مثل serde_json، serde_yaml).
لماذا نحتاج Serde؟
\n- \n
- حفظ الحالة: كتابة الإعدادات، حفظ اللعبة، ذاكرة التخزين المؤقت على القرص \n
- بروتوكولات الشبكة: تبادل البيانات بين العميل والخادم (REST API، WebSocket) \n
- ملفات الإعدادات: قراءة الإعدادات من JSON/YAML/TOML \n
- قواعد البيانات: تسلسل السجلات للتخزين في Redis و MongoDB وقواعد بيانات أخرى \n
- التواصل بين العمليات: نقل البيانات بين العمليات عبر الأنابيب أو المقابس \n
التثبيت
\n\nيتم تثبيت Serde عبر مدير الحزم Cargo المدمج في Rust. للبدء، أضف التبعيات إلى ملف Cargo.toml:
[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
إذا كنت تعمل مع Rust 2021 edition أو أحدث، يكفي إضافة هذه الأسطر. لتثبيت إصدار معين، حدد الرقم، مثل serde_json = "1.0.128".
بداية سريعة: المثال الأول
\n\nلننشئ هيكلًا بسيطًا ونقوم بتسلسله إلى JSON، ثم إلغاء تسلسله مرة أخرى:
\n\nuse 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مخرجات البرنامج:
\nJSON المسلسل: {"id":42,"name":"أليس","email":"alice@example.com","active":true}\nالهيكل بعد إلغاء التسلسل: User { id: 4