التسلسل المخصص
سمات الحقول
التسلسل المخصص درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
تخصيص serde
يمنح serde تحكمًا دقيقًا في كيفية ربط الحقول بالتنسيق باستخدام السمات. يمكنكم إعادة تسمية الحقول وتخطيها وتعيين قيم افتراضية وغير ذلك، وكل ذلك عبر #[serde(...)].
إعادة تسمية حقل
استخدموا rename لربط اسم حقل Rust بمفتاح مختلف في الناتج، وهو أمر مفيد عندما يستخدم JSON اصطلاحًا مختلفًا.
use serde::Serialize;
#[derive(Serialize)]
struct User {
#[serde(rename = "userName")]
user_name: String,
}إعادة تسمية جميع الحقول
طبّقوا اصطلاح تسمية على جميع الحقول دفعة واحدة باستخدام rename_all، مثل تحويل snake_case في Rust إلى camelCase في JSON.
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
first_name: String,
last_name: String,
}تخطي الحقول
تحذف skip الحقل بالكامل. أما skip_serializing_if فتحذفه بشكل مشروط، مثل إخفاء الخيارات الفارغة.
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
nickname: Option<String>,
}القيم الافتراضية عند إلغاء التسلسل
توفر default قيمةً عندما يكون الحقل مفقودًا من الإدخال، وبذلك لا يفشل إلغاء التسلسل.
use serde::Deserialize;
#[derive(Deserialize)]
struct Config {
#[serde(default)]
retries: u32,
}دالة افتراضية مخصصة
وجّهوا default إلى دالة لتوفير قيمة بديلة غير صفرية.
use serde::Deserialize;
fn default_port() -> u16 { 8080 }
#[derive(Deserialize)]
struct Config {
#[serde(default = "default_port")]
port: u16,
}نمذجة إعادة التسمية والقيمة الافتراضية
منطق السمات ليس سوى ربط للمفاتيح مع قيمة بديلة. يحاكي هذا المثال القابل للتشغيل ذلك السلوك باستخدام HashMap.
use std::collections::HashMap;
fn main() {
let mut input: HashMap<&str, &str> = HashMap::new();
input.insert("userName", "Alice");
let user_name = input.get("userName").copied().unwrap_or("anon");
let port = input.get("port").copied().unwrap_or("8080");
println!("user_name={} port={}", user_name, port);
}الأسماء البديلة عند إلغاء التسلسل
تقبل alias مفتاحًا بديلًا عند القراءة، وهو مفيد عند دعم أسماء الحقول القديمة والجديدة معًا.
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
#[serde(alias = "username")]
name: String,
}التسطيح
تضع flatten حقول البنية المتداخلة داخل الكائن الأب مباشرةً، فتزيل مستوى واحدًا من التداخل في JSON.
use serde::Serialize;
#[derive(Serialize)]
struct Meta { page: u32 }
#[derive(Serialize)]
struct Resp {
data: String,
#[serde(flatten)]
meta: Meta,
}التخصيص باستخدام وحدة
للحصول على تحكم كامل، وجّهوا with إلى وحدة تعرض دالتي serialize وdeserialize، مثلًا لتنسيق طابع زمني.
use serde::Serialize;
#[derive(Serialize)]
struct Event {
#[serde(with = "my_date_format")]
at: i64,
}وسم التعدادات
تحكّم في طريقة ترميز التعدادات باستخدام tag (وسم داخلي) أو untagged. ويحدد ذلك بنية JSON للأنواع متعددة المتغيرات.
use serde::Serialize;
#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
Click { x: i32, y: i32 },
Key { code: u8 },
}اختبار سريع
اختبر مدى فهمك للتسلسل المخصص.
مراجعة
لقد تعلمتم كيفية تخصيص التسلسل:
- يحدد
renameوrename_allأسماء الحقول - يتحكم
skipوskip_serializing_ifفي المخرجات - يسهّل
defaultوaliasإلغاء التسلسل - يتعامل
flattenوwithوtagالخاص بالتعدادات مع البنية
التالي: تنسيقات تتجاوز JSON.
الأسئلة الشائعة
هل درس «التسلسل المخصص» مجاني؟
نعم — نص درس «التسلسل المخصص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «التسلسل المخصص»؟
سمات الحقول تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التسلسل المخصص»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التسلسل وإلغاء التسلسل
- التعامل مع JSON
- التسلسل المخصص
- تنسيقات أخرى