وحدات Protobuf

يتيح نظام الإنشاء إنشاء واجهات 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.