يتيح نظام الإنشاء إنشاء واجهات protobuf من خلال نوع وحدة
rust_protobuf
.
يتم إنشاء الرمز البرمجي الأساسي لـ protobuf باستخدام حزمة rust-protobuf
.
للاطّلاع على مستندات حول هذا الاستخدام، يُرجى الاطّلاع على صفحة مشروع GitHub
مع أمثلة protobuf المناسبة.
تتوفّر أيضًا ملفات protobuf الخاصة بـ gRPC، ويتم إنشاؤها من خلال حزمة grpc-rs
.
للاطّلاع على مستندات حول هذا الاستخدام، يُرجى الاطّلاع على المستندات في صفحة مشروع gRPC على GitHub.
الاستخدام الأساسي لبناء rust_protobuf
يقدّم ما يلي مثالاً على تحديد وحدة protobuf
واستخدام هذه الوحدة كمجموعة. يمكنك الاطّلاع على مزيد من التفاصيل حول السمات المهمة وكيفية استخدامها في القسم تحديد rust_protobuf
.
إذا كنت بحاجة إلى استخدام رمز تم إنشاؤه باستخدام protobuf من خلال رمز برمجي include!()
، مثل
رمز تابع لجهة خارجية، يمكنك الاطّلاع على صفحة أدوات إنشاء الرموز البرمجية
للحصول على مثال. (يستخدِم المثال وحدة rust_bindgen
، ولكن وسائل
تضمين المصدر هي نفسها لجميع أدوات إنشاء المصادر).
تحديد وحدة rust_protobuf Android.bp
لنفترض أنّ لديك بعض الوحدات النمطية في src/protos/my.proto
بالنسبة إلى Android.bp، ويتم بعد ذلك تعريف
الوحدة على النحو التالي:
rust_protobuf {
name: "libmy_proto",
// Crate name that's used to generate the rust_library variants.
crate_name: "my_proto",
// Relative paths to the protobuf source files
protos: ["src/protos/my.proto"],
// If protobufs define gRPCs, then they should go in grpc_protos
// instead.
// grpc_protos: ["src/protos/my.proto"],
// 'source_stem' controls the output filename.
// This is the filename that's used in an include! macro.
source_stem: "my_proto_source",
}
يتم تحديد المكتبة التي تستخدم هذا الحِزمة من خلال الإشارة إليها كما لو كانت أي مكتبة أخرى تعتمد عليها:
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
بنية الحزمة لوحدات rust_protobuf
يتم تنظيم كل ملف protobuf كوحدة خاصة به ضمن الحزمة، مع أخذ اسم ملف protobuf. وهذا يعني أنّ جميع أسماء ملفات قاعدة proto يجب أن تكون فريدة. على سبيل المثال، لنفترض أنّ rust_protobuf
محدّد على النحو التالي:
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
يمكن الوصول إلى ملفات proto المختلفة ضمن هذا الحِزمة على النحو التالي:
// use <crate_name>::<proto_filename>
use foo::a; // protobuf interface defined in a.proto
use foo::b; // protobuf interface defined in b.proto
use foo::c; // protobuf interface defined in c.proto
use foo::c_grpc; // grpc interface defined in c.proto
خصائص rust_protobuf البارزة
إنّ الخصائص المحدّدة أدناه هي بالإضافة إلى الخصائص الشائعة والمهمة
التي تنطبق على جميع الوحدات. هذه العناصر إما مهمة بشكل خاص لحِزم rust_protobuf
protobuf في Rust، أو تُظهر سلوكًا فريدًا خاصًا بنوع rust_protobuf
الحزمة.
stem، وname، وcrate_name
تُنشئ rust_protobuf
صيغ المكتبة، لذا تنطبق المتطلبات نفسها
على هذه السمات الثلاث كما تنطبق على وحدات rust_library
. اطّلِع على خصائص
rust_library
لمعرفة التفاصيل.
protos
هذه قائمة بالمسارات النسبية لملفات protobuf لإنشاء واجهة protobuf. يجب أن تكون أسماء الملفات الأساسية فريدة في كل من protos
وgrpc_protos
.
grpc_protos
يتألّف grpc_protos
من قائمة بالمسارات النسبية لملفات protobuf التي تحددgrpcs
لإنشاء واجهة protobuf. يجب أن تكون أسماء الملفات الأساسية فريدة
في كلّ من protos
وgrpc_protos
.
source_stem
source_stem
هو اسم ملف المصدر الذي تم إنشاؤه والذي يمكن تضمينه.
هذا تعريف حقل مطلوب، حتى إذا كنت تستخدم عمليات الربط كصندوق
، لأنّ السمة stem
تتحكّم فقط في اسم ملف الإخراج لصيغ المكتبة التي تم
إنشاؤها. على عكس منشئي المصادر الآخرين، يتم وضع علامة mod_ في بداية اسم الملف، ما يجعل اسم الملف النهائي هو mod_<stem>. ويمنع ذلك تداخل الأسماء مع المصادر التي تم إنشاؤها من كل ملف proto.
بالإضافة إلى ذلك، تتوفّر أيضًا المجموعة الكاملة من سمات المكتبة للتحكّم في تجميع المكتبة، على الرغم من أنّه نادرًا ما يحتاج المرء إلى تحديدها أو تغييرها، تمامًا مثل وحدة ربطات bindgen.