ماژول های پروتوباف

سیستم ساخت از تولید رابط های پروتوباف از طریق نوع ماژول rust_protobuf پشتیبانی می کند.

تولید کد اولیه پروتوباف با جعبه rust-protobuf انجام می شود. برای مشاهده مستندات مربوط به این استفاده، به صفحه پروژه GitHub با نمونه‌های protobuf مربوطه مراجعه کنید.

پروتوباف‌های gRPC نیز پشتیبانی می‌شوند، با تولید توسط جعبه grpc-rs . برای مشاهده مستندات مربوط به این استفاده، به مستندات موجود در صفحه پروژه مربوطه gRPC GitHub مراجعه کنید.

استفاده اولیه 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، مجموعه کاملی از خصوصیات کتابخانه نیز برای کنترل مجموعه کتابخانه در دسترس است، اگرچه اینها به ندرت نیاز به تعریف یا تغییر دارند.