وحدات Protobuf

يدعم نظام البناء إنشاء واجهات protobuf من خلال نوع الوحدة النمطية rust_protobuf .

يتم تنفيذ إنشاء كود البروتوبوف الأساسي باستخدام صندوق rust-protobuf . لعرض الوثائق المتعلقة بهذا الاستخدام، راجع صفحة مشروع GitHub مع أمثلة protobuf المقابلة.

يتم أيضًا دعم نماذج gRPC protobufs، مع التوليد المقدم من خلال صندوق grpc-rs . لعرض الوثائق المتعلقة بهذا الاستخدام، راجع الوثائق الموجودة على صفحة مشروع gRPC GitHub المقابلة.

الاستخدام الأساسي لبناءrus_protobuf

فيما يلي مثال على تعريف وحدة protobuf واستخدام تلك الوحدة كصندوق. مزيد من التفاصيل حول الخصائص المهمة وكيفية استخدامها موجودة في قسم تعريف rust_protobuf .

إذا كنت بحاجة إلى استخدام تعليمات برمجية تم إنشاؤها بواسطة protobuf من خلال include!() ، مثل تعليمات برمجية خارجية، فراجع صفحة Source Generators للحصول على مثال. (يستخدم المثال وحدة 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. وهذا يعني أن جميع أسماء الملفات الأساسية الأولية يجب أن تكون فريدة. على سبيل المثال، خذ rust_protobuf المعرف على النحو التالي:

rust_protobuf {
    name: "libfoo",
    crate_name: "foo",
    protos: ["a.proto", "b.proto"],
    grpc_protos: ["c.proto"],
    source_stem: "my_proto_source",
}

سيتم الوصول إلى النماذج الأولية المختلفة داخل هذا الصندوق على النحو التالي:

// 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، أو تظهر سلوكًا فريدًا خاصًا بنوع وحدة rust_protobuf .

الجذعية، الاسم، اسم الصندوق

يُنتج rust_protobuf متغيرات للمكتبة، لذا توجد نفس المتطلبات لهذه الخصائص الثلاثة كما هو الحال بالنسبة لوحدات rust_library . راجع خصائص rust_library للحصول على التفاصيل.

بروتوس

هذه قائمة بالمسارات النسبية لملفات protobuf لإنشاء واجهة protobuf. يجب أن تكون أسماء الملفات الأساسية فريدة عبر protos و grpc_protos .

grpc_protos

يتكون grpc_protos من قائمة المسارات النسبية لملفات protobuf التي تحدد grpcs لإنشاء واجهة protobuf. يجب أن تكون أسماء الملفات الأساسية فريدة عبر protos و grpc_protos .

source_stem

source_stem هو اسم الملف المصدر الذي تم إنشاؤه والذي يمكن تضمينه. يعد هذا تعريف حقل مطلوبًا، حتى إذا كنت تستخدم الارتباطات كصندوق، نظرًا لأن الخاصية stem تتحكم فقط في اسم ملف الإخراج لمتغيرات المكتبة التي تم إنشاؤها. على عكس المولدات المصدرية الأخرى، يبدأ اسم الملف بـ mod_ ، مما يجعل اسم الملف النهائي mod_<stem> . وهذا يمنع تضارب الأسماء مع المصادر التي تم إنشاؤها من كل نموذج أولي.

بالإضافة إلى ذلك، مثل وحدة ربط Bindgen، تتوفر أيضًا المجموعة الكاملة من خصائص المكتبة للتحكم في تجميع المكتبة، على الرغم من أنها نادرًا ما تحتاج إلى تعريف أو تغيير.