سیستم ساخت از تولید رابط های پروتوباف از طریق نوع ماژول rust_protobuf
پشتیبانی می کند.
تولید کد اولیه پروتوباف با جعبه rust-protobuf
انجام می شود. برای مشاهده مستندات مربوط به این استفاده، به صفحه پروژه GitHub با نمونههای protobuf مربوطه مراجعه کنید.
پروتوبافهای gRPC نیز پشتیبانی میشوند، با تولید توسط جعبه grpc-rs
. To view documentation on this usage, see the documentation on the corresponding gRPC GitHub project page .
استفاده اولیه از rust_protobuf ساخت
در ادامه مثالی از تعریف یک ماژول پروتوباف و استفاده از آن ماژول به عنوان جعبه ارائه شده است. جزئیات بیشتر در مورد خواص مهم و نحوه استفاده از آنها در بخش تعریف rust_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
نشان می دهند.
ساقه، نام، crate_name
rust_protobuf
انواع کتابخانهای را تولید میکند، بنابراین همان الزاماتی که برای ماژولهای rust_library
وجود دارد، برای این سه ویژگی وجود دارد. برای جزئیات بیشتر به ویژگی های rust_library
مراجعه کنید.
پروتوها
این لیستی از مسیرهای نسبی به فایل های protobuf برای تولید رابط protobuf است. نام فایل های پایه باید در protos
و grpc_protos
منحصر به فرد باشد.
grpc_protos
grpc_protos
شامل لیستی از مسیرهای نسبی به فایلهای protobuf است که grpcs
برای تولید رابط protobuf تعریف میکند. نام فایل های پایه باید در protos
و grpc_protos
منحصر به فرد باشد.
منبع_ساقه
source_stem
نام فایل برای فایل منبع تولید شده است که می تواند اضافه شود. این یک تعریف فیلد الزامی است، حتی اگر از اتصالات به عنوان جعبه استفاده می کنید، زیرا ویژگی stem
فقط نام فایل خروجی را برای انواع کتابخانه تولید شده کنترل می کند. بر خلاف سایر مولدهای منبع، نام فایل با mod_ پیشوند می شود و نام فایل نهایی mod_<stem> را می سازد. این از برخورد نام با منابع تولید شده از هر پروتو جلوگیری می کند.
علاوه بر این، مانند ماژول bindgen bindings، مجموعه کاملی از خصوصیات کتابخانه نیز برای کنترل مجموعه کتابخانه در دسترس است، اگرچه اینها به ندرت نیاز به تعریف یا تغییر دارند.