Modul Protobuf

Sistem build mendukung pembuatan antarmuka protobuf melalui tipe modul rust_protobuf .

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

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

Penggunaan dasar build Rust_protobuf

Berikut ini adalah contoh pendefinisian modul protobuf dan penggunaan modul tersebut sebagai peti. Detail lebih lanjut tentang properti penting dan cara penggunaannya ada di bagian Mendefinisikan rust_protobuf .

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

Tentukan modul Rust_protobuf Android.bp

Asumsikan beberapa proto di src/protos/my.proto relatif terhadap Android.bp Anda; modul kemudian didefinisikan 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",
}

Perpustakaan yang menggunakan peti ini didefinisikan dengan mereferensikannya seolah-olah itu adalah ketergantungan perpustakaan lainnya:

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

Struktur peti modul Rust_protobuf

Setiap file protobuf diatur sebagai modulnya sendiri di dalam peti, mengambil nama file protobuf. Ini berarti semua nama file basis 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",
}

Proto berbeda di dalam peti ini dapat 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 karat_protobuf yang terkenal

Properti yang didefinisikan di bawah ini merupakan tambahan dari properti umum Penting yang berlaku untuk semua modul. Ini sangat penting untuk modul protobuf Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_protobuf .

batang, nama, nama_ peti

rust_protobuf menghasilkan varian perpustakaan, sehingga persyaratan yang sama berlaku untuk ketiga properti ini seperti yang berlaku untuk modul rust_library . Lihat properti rust_library untuk detailnya.

proto

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

grpc_protos

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

sumber_batang

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

Selain itu, seperti modul pengikatan bindgen, set lengkap properti perpustakaan juga tersedia untuk mengontrol kompilasi perpustakaan, meskipun ini jarang perlu didefinisikan atau diubah.