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.