→ جميع الأدوات Code Gen

مولّد هياكل Rust من JSON

الصق JSON واحصل على هياكل Rust اصطلاحية مع اشتقاقات serde جاهزة للإنتاج.

0 حرف

100% من جانب العميل

يتم تشغيل كل التحويل بالكامل في متصفحك. بياناتك لا تُرسل أبدًا إلى أي خادم.

هياكل Rust وSerde

تُعدّ Serde المعيار الفعلي للتسلسل JSON في Rust. يولّد المحوّل تعريفات هياكل مزيّنة بـ #[derive(Debug, Clone, Serialize, Deserialize)] — أكثر تركيبة اشتقاق شيوعًا لهياكل البيانات. يُفترض serde_json كوقت تشغيل فيعمل الكود المولّد مع serde_json::from_str وserde_json::to_string مباشرةً.

يتبع تعيين الأنواع محاور Rust: سلاسل JSON تصبح String والأعداد الصحيحة i64 والكسور العشرية f64 والقيم المنطقية bool والمصفوفات Vec<T>. الكائنات المتداخلة تولّد هياكل مسمّاة منفصلة. الحقول التي تكون null في JSON أو غائبة في بعض كائنات المصفوفة تُكتب Option<T> مع سمة #[serde(skip_serializing_if = "Option::is_none")] لحذفها عند كونها None.

تستخدم أسماء الحقول في Rust صيغة snake_case بينما يستخدم JSON كثيرًا camelCase. يُنتج المولّد #[serde(rename = "originalKey")] للحقول التي يختلف اسمها في Rust عن مفتاح JSON واختياريًا سمة الحاوية #[serde(rename_all = "camelCase")].

الملكية وعمر المتغيرات والأداء

تستخدم المخرجات الافتراضية أنواع String مملوكة لحقول النص مما يعني أن الهيكل يملك جميع بياناته ويمكن نقله وتخزينه بحرية. وضع بديل "مُستعار" يستبدل String بـ &str (مع معامل عمر) لتجنّب التخصيص عند إلغاء التسلسل من مخزن مؤقت تملكه مسبقًا.

لمستندات JSON الكبيرة تدعم serde_json إلغاء التسلسل بالبث عبر serde_json::Deserializer::from_reader. الهياكل المولّدة متوافقة تمامًا مع البث لأن تصميم serde القائم على السمات لا يعتمد على مصدر البيانات.

يعني مطابقة الأنماط الاستنفادية في Rust أن إضافة حقل جديد إلى استجابة JSON لن تكسر الكود الموجود بصمت. يمكن إضافة السمة #[serde(deny_unknown_fields)] للكشف عن مفاتيح JSON غير المتوقعة.

سير عمل تطوير Rust

يحتاج مطوّرو الواجهة الخلفية في Rust الذين يستخدمون Axum أو Actix-web أو Warp إلى نماذج طلب واستجابة مكتوبة بالأنواع. يولّد المحوّل هياكل تعمل مباشرةً مع مُستخرج Json<T> في Axum.

كثيرًا ما تحلّل أدوات CLI ونصوص معالجة البيانات في Rust ملفات إعداد JSON أو استجابات API. يُهيّئ المولّد تعريفات الهياكل حتى تتمكن من التركيز على منطق الأعمال.

مشاريع WebAssembly التي تستدعي واجهات JavaScript برمجية كثيرًا ما تتلقى بيانات JSON. هياكل serde المولّدة متوافقة مع wasm-bindgen وserde-wasm-bindgen.

FAQ

هل تُرسَل بياناتي إلى خادم؟

لا. تتم جميع المعالجة بالكامل داخل متصفحك. لا يغادر JSON جهازك أبدًا.

ما تبعيات Cargo التي أحتاجها؟

أضف serde = { version = "1", features = ["derive"] } وserde_json = "1" إلى Cargo.toml. الكود المولّد يستورد هذين الـ crate فحسب.

كيف تُعالَج الكلمات المحجوزة في Rust كأسماء حقول؟

الكلمات المحجوزة في Rust مثل "type" و"match" و"use" و"ref" تُبادَر بـ r# (صياغة المعرّف الخام مثلًا r#type) وسمة #[serde(rename = "type")] تحافظ على مفتاح JSON الأصلي.

هل يمكنني توليد تعدادات لأنواع اتحاد السلاسل؟

يولّد المحوّل الأساسي هياكل. للحقول التي تعمل كتعدادات مُميَّزة يمكنك يدويًا استبدال حقل String بتعداد Rust مع #[derive(Deserialize)].

هل الهياكل المتداخلة بعمق مدعومة؟

نعم. كل كائن JSON متداخل يصبح هيكلًا مسمّى خاصًا به. جميع الهياكل تُنتَج في ملف واحد بترتيب التبعيات.

أدوات ذات صلة