التسلسل وإلغاء التسلسل
وحدات Derive الماكرو
التسلسل وإلغاء التسلسل درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ما هو Serde؟
إن Serde (التسلسل وإلغاء التسلسل) هو إطار Rust لتحويل هياكل البيانات من وإلى تنسيقات مثل JSON وYAML وغيرها.
- نواة مستقلة عن التنسيق، بالإضافة إلى حزم التنسيقات
- يعتمد على وحدات ماكرو الاشتقاق
إضافة serde
أضيفوا serde مع ميزة derive، بالإضافة إلى حزمة تنسيق مثل serde_json. يؤدي ذلك إلى تعديل Cargo.toml.
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"اشتقاق السمات
ضعوا التعليق #[derive(Serialize, Deserialize)] على بنية لجعلها قابلة للتحويل. ويجب أن يكون كل حقل قابلًا للتسلسل بحد ذاته.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct User {
id: u32,
name: String,
}يعني Serialize التحويل إلى تنسيق
يحوّل Serialize قيمةً إلى بايتات أو نص بتنسيق معين. ولا تعرف البنية التنسيق المستخدم؛ إذ تحدده حزمة التنسيق.
يعني Deserialize التحويل من تنسيق
يحلل Deserialize النص أو البايتات لإعادتها إلى قيمة Rust، مع التحقق من الأنواع والحقول المطلوبة أثناء ذلك.
نمذجة Serialize يدويًا
لبناء الفهم، إليكم أداة تسلسل مكتوبة يدويًا لبنية بسيطة. ينشئ serde شيفرة مشابهة لذلك نيابةً عنكم.
struct User { id: u32, name: String }
fn serialize(u: &User) -> String {
format!("id={};name={}", u.id, u.name)
}
fn main() {
let u = User { id: 7, name: "Alice".to_string() };
println!("{}", serialize(&u));
}نمذجة Deserialize يدويًا
وهنا العملية العكسية: تحليل النص وإعادته إلى البنية. تنفذ الشيفرة التي ينشئها serde ذلك بموثوقية عبر التنسيقات المختلفة.
struct User { id: u32, name: String }
fn deserialize(s: &str) -> User {
let parts: Vec<&str> = s.split(',').collect();
let id = parts[0].parse().unwrap();
let name = parts[1].to_string();
User { id, name }
}
fn main() {
let u = deserialize("42,Bob");
println!("{} {}", u.id, u.name);
}الاشتقاق على التعدادات
تعمل التعدادات أيضًا. افتراضيًا، يُسلسل كل متغير باسمه، مع تضمين أي بيانات داخله.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
enum Shape {
Circle { radius: f64 },
Square { side: f64 },
}الهياكل المتداخلة
ينفذ serde الاستدعاء التكراري تلقائيًا. وتعمل البنية التي تحتوي على هياكل أخرى مشتقة أو على Vec دون إعداد إضافي.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Address { city: String }
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
addresses: Vec<Address>,
}Serialize فقط أو Deserialize فقط
يمكنكم اشتقاق سمة واحدة فقط. فقد يكون نوع استجابة API من النوع Serialize فقط، بينما يكون نوع الطلب الوارد من النوع Deserialize فقط.
use serde::Serialize;
#[derive(Serialize)]
struct ApiResponse {
status: u16,
message: String,
}متطلبات الاشتقاق
يجب أن يطبّق نوع كل حقل السمة التي تشتقونها. تطبق الأنواع والمجموعات القياسية هذه السمات مسبقًا، أما الأنواع المخصصة فتحتاج إلى اشتقاقها الخاص.
use serde::Serialize;
#[derive(Serialize)]
struct Inner { x: i32 }
#[derive(Serialize)]
struct Outer { inner: Inner }تحقق سريع
اختبروا فهمكم للتسلسل وإلغاء التسلسل.
مراجعة
لقد تعلمتم أساسيات serde:
- serde إطار للتسلسل وإلغاء التسلسل مستقل عن التنسيق
- ينشئ
#[derive(Serialize, Deserialize)]شيفرة التحويل - يعمل مع الهياكل والتعدادات والأنواع المتداخلة
- يمكنكم اشتقاق اتجاه واحد فقط عند الحاجة
التالي: التعامل مع JSON باستخدام serde_json.
الأسئلة الشائعة
هل درس «التسلسل وإلغاء التسلسل» مجاني؟
نعم — نص درس «التسلسل وإلغاء التسلسل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «التسلسل وإلغاء التسلسل»؟
وحدات Derive الماكرو تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «التسلسل وإلغاء التسلسل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التسلسل وإلغاء التسلسل
- التعامل مع JSON
- التسلسل المخصص
- تنسيقات أخرى