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 crate 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 ditentukan 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 adalah tambahan dari Properti umum yang penting
yang berlaku untuk semua modul. Hal 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_protos
grpc_protos
terdiri dari daftar jalur relatif ke file protobuf yang menentukan grpcs
untuk menghasilkan antarmuka protobuf. Nama file dasar harus unik
di protos
dan grpc_protos
.
source_stem
source_stem
adalah nama file untuk file sumber yang dihasilkan yang dapat disertakan.
Ini adalah definisi kolom yang diperlukan, meskipun Anda menggunakan binding sebagai
crate, 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.