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 tentang 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 tentang penggunaan ini, lihat dokumentasi di halaman proyek gRPC GitHub yang sesuai .

Penggunaan build rust_protobuf dasar

Berikut ini adalah contoh pendefinisian modul protobuf dan menggunakan 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!() , seperti untuk kode pihak ketiga, lihat halaman Generator Sumber untuk contoh. (Contohnya menggunakan modul rust_bindgen , tetapi cara penyertaan sumber sama untuk semua generator sumber.)

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

Pustaka yang menggunakan peti ini ditentukan dengan mereferensikannya seolah-olah itu adalah dependensi pustaka 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 yang berbeda dalam peti 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 terkenal

Properti yang ditentukan di bawah ini adalah tambahan dari Properti umum penting yang berlaku untuk semua modul. Ini sangat penting untuk modul protobuf Rust, atau menunjukkan perilaku unik khusus untuk tipe modul rust_protobuf .

batang, nama, peti_nama

rust_protobuf menghasilkan varian perpustakaan, jadi persyaratan yang sama ada untuk ketiga properti ini seperti yang mereka lakukan 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 .

source_stem

source_stem adalah nama file untuk file sumber yang dihasilkan yang dapat disertakan. Ini adalah definisi bidang yang diperlukan, bahkan jika Anda menggunakan binding 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_ , membuat nama file terakhir mod_<stem> . Ini mencegah tabrakan nama dengan sumber yang dihasilkan dari setiap proto.

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