Modul Protobuf

Sistem build mendukung pembuatan antarmuka protobuf melalui jenis modul rust_protobuf.

Pembuatan kode protobuf dasar dilakukan dengan crate rust-protobuf. Untuk melihat dokumentasi tentang penggunaan ini, lihat halaman project GitHub dengan contoh protobuf yang sesuai.

Protobuf gRPC juga didukung, dengan pembuatan yang disediakan oleh container grpc-rs. Untuk melihat dokumentasi tentang penggunaan ini, lihat dokumentasi di halaman project GitHub gRPC yang sesuai.

Penggunaan build rust_protobuf dasar

Berikut adalah contoh penentuan modul protobuf dan penggunaan modul tersebut sebagai crate. Detail selengkapnya tentang properti penting dan cara penggunaannya ada di bagian Menentukan rust_protobuf.

Jika Anda perlu menggunakan kode yang dihasilkan protobuf melalui makro include!(), seperti untuk kode pihak ketiga, lihat halaman Generator Sumber untuk mengetahui contohnya. (Contoh menggunakan modul rust_bindgen, tetapi cara penyertaan sumber sama untuk semua generator sumber.)

Menentukan modul Android.bp rust_protobuf

Asumsikan beberapa proto di src/protos/my.proto relatif terhadap Android.bp Anda; modul kemudian ditentukan sebagai berikut:

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",
}

Library yang menggunakan crate ini ditentukan dengan mereferensikannya seolah-olah dependensi library lainnya:

rust_binary {
    name: "hello_rust_proto",
    srcs: ["src/main.rs"],
    rustlibs: ["libmy_proto"],
}

Struktur crate modul rust_protobuf

Setiap file protobuf diatur sebagai modulnya sendiri dalam crate, dengan mengambil nama file protobuf. Artinya, semua nama file dasar proto harus unik. Misalnya, ambil rust_protobuf yang didefinisikan sebagai berikut:

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

Berbagai proto dalam crate ini akan diakses sebagai berikut:

// 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

Properti rust_protobuf yang penting

Properti yang ditentukan di bawah ini merupakan tambahan untuk Properti umum penting yang berlaku untuk semua modul. Modul ini sangat penting untuk modul protobuf Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_protobuf.

stem, name, crate_name

rust_protobuf menghasilkan varian library, sehingga persyaratan yang sama berlaku untuk tiga properti ini seperti halnya untuk modul rust_library. Lihat properti rust_library untuk mengetahui detailnya.

protos

Ini adalah daftar jalur relatif ke file protobuf untuk membuat antarmuka protobuf. Nama file dasar harus unik di protos dan grpc_protos.

grpc_proto

grpc_protos terdiri dari daftar jalur relatif ke file protobuf yang menentukan grpcs untuk membuat antarmuka protobuf. Nama file dasar harus unik di seluruh protos dan grpc_protos.

stem_sumber

source_stem adalah nama file untuk file sumber yang dihasilkan yang dapat disertakan. Ini merupakan definisi kolom wajib diisi, meskipun Anda menggunakan binding sebagai peti, karena properti stem hanya mengontrol nama file output untuk varian library yang dihasilkan. Tidak seperti generator sumber lainnya, nama file akan diawali dengan mod_, sehingga nama file akhir menjadi mod_<stem>. Hal ini mencegah tabrakan nama dengan sumber yang dihasilkan dari setiap proto.

Selain itu, seperti modul binding bindgen, kumpulan lengkap properti library juga tersedia untuk mengontrol kompilasi library, meskipun jarang perlu ditentukan atau diubah.