تنسيقات أخرى
TOML وYAML وbincode
تنسيقات أخرى درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ما يتجاوز JSON
إن جوهر serde مستقل عن التنسيق، لذلك تعمل البنية المشتقة نفسها مع العديد من التنسيقات بمجرد تبديل حزمة التنسيق.
- TOML لملفات الإعداد
- YAML للبيانات سهلة القراءة للبشر
- bincode للبيانات الثنائية المدمجة
بنية واحدة، تنسيقات متعددة
تعرّفون البنية مرة واحدة. وتوفر كل حزمة تنسيق مكافئاتها الخاصة لـ to_string / from_str فوق تطبيقات Serialize / Deserialize نفسها.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Config {
name: String,
port: u16,
}TOML
يُستخدم TOML على نطاق واسع لملفات الإعداد (فملف Cargo.toml نفسه يستخدمه). وتتولى حزمة toml إجراء التسلسل وتحليله.
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_toml(c: &Config) -> String {
toml::to_string(c).unwrap()
}تحليل TOML
اقرؤوا إعدادات TOML وأعيدوا تحميلها في بنيتكم باستخدام toml::from_str.
use serde::Deserialize;
#[derive(Deserialize)]
struct Config { name: String, port: u16 }
fn parse(s: &str) -> Config {
toml::from_str(s).unwrap()
}YAML
يناسب YAML البيانات التي يحررها البشر وتحتوي على تداخلات. استخدموا حزمة مثل serde_yaml مع بنية واجهة الاستخدام نفسها.
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_yaml(c: &Config) -> String {
serde_yaml::to_string(c).unwrap()
}bincode
إن bincode تنسيق ثنائي مدمج، وهو مناسب جدًا للتخزين المؤقت أو الإرسال عبر الشبكة عندما يكون الحجم والسرعة مهمين ولا يقرأه البشر مطلقًا.
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_bytes(c: &Config) -> Vec<u8> {
bincode::serialize(c).unwrap()
}اختيار التنسيق
اختاروا التنسيق بناءً على الجمهور:
- إعدادات يقرأها البشر وتحتوي على تداخلات: TOML أو YAML
- واجهات الويب البرمجية: JSON
- التخزين أو النقل الثنائي الداخلي: bincode
نمذجة اختيار التنسيق
القرار هو مجرد ربط حالة الاستخدام بالتنسيق المناسب. يوضح هذا المثال القابل للتشغيل منطق الاختيار هذا.
fn pick_format(use_case: &str) -> &str {
match use_case {
"config" => "TOML",
"api" => "JSON",
"cache" => "bincode",
_ => "JSON",
}
}
fn main() {
println!("{}", pick_format("config"));
println!("{}", pick_format("cache"));
println!("{}", pick_format("api"));
}التنقل ذهابًا وإيابًا عبر البايتات
تدعم التنسيقات الثنائية عملية الذهاب والإياب: إجراء التسلسل إلى بايتات، ثم إلغاء التسلسل لإعادتها إلى البنية نفسها. ويجسّد هذا المثال القابل للتشغيل مفهوم دورة الذهاب والإياب لطول البايتات بصورة مفاهيمية.
fn encode(name: &str) -> Vec<u8> {
name.as_bytes().to_vec()
}
fn decode(bytes: &[u8]) -> String {
String::from_utf8(bytes.to_vec()).unwrap()
}
fn main() {
let bytes = encode("Alice");
println!("len={}", bytes.len());
println!("back={}", decode(&bytes));
}خصائص التنسيقات الخاصة
تختلف التنسيقات في إمكاناتها. فلا يسمح TOML بالقيم الخالية ويحتاج إلى جداول للتداخل؛ ويدعم YAML المراسي؛ أما bincode فلا يصف نفسه، ولذلك يجب أن يتشارك الطرفان النوع نفسه.
تظل السمات سارية
تعمل سمات #[serde(...)] التي تعلمتموها (rename وdefault وskip) مع جميع التنسيقات، لأنها تعمل على طبقة serde لا على طبقة التنسيق.
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
struct Config { max_connections: u32 }اختبار سريع
اختبروا مدى فهمكم للتنسيقات الأخرى.
مراجعة
لقد تعلمتم التنسيقات الأخرى في serde:
- تعمل بنية مشتقة واحدة مع TOML وYAML وJSON وbincode
- توفر كل حزمة تنسيق واجهات برمجية مألوفة بأسلوب
to_string/from_str - اختاروا التنسيق وفقًا للجمهور: إعدادات أو واجهة برمجية أو تخزين ثنائي
- تنطبق سمات serde على كل تنسيق
وبذلك تكتمل دورة Serde وسلسلة Rust.
الأسئلة الشائعة
هل درس «تنسيقات أخرى» مجاني؟
نعم — نص درس «تنسيقات أخرى» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «تنسيقات أخرى»؟
TOML وYAML وbincode تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تنسيقات أخرى»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.