Protobuf 模組

建構系統支援透過 rust_protobuf 模組類型產生 protobuf 介面。

基本的 protobuf 程式碼是透過 rust-protobuf Crate 產生。如要查看這個用法的說明文件,請參閱 GitHub 專案頁面和對應的 protobuf 範例

系統也支援 gRPC protobuf,並使用 grpc-rs Crate 提供的產生版本。如要查看此用法的說明文件,請前往對應的 gRPC GitHub 專案頁面查看說明文件。

基本 rust_protobuf 建構用法

以下提供定義 protobuf 模組並將該模組用作 crate 的範例。如要進一步瞭解重要屬性及其使用方式,請參閱「定義 rust_protobuf」一節。

如果您需要透過 include!() 巨集使用 protobuf 產生的程式碼 (例如針對第三方程式碼),請參閱來源產生器頁面範例。(範例使用 rust_bindgen 模組,但所有來源產生器的來源納入方式相同)。

定義 rust_protobuf Android.bp 模組

假設在 src/protos/my.proto 中有一些相對於 Android.bp 的 Proto,則模組會定義如下:

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

使用這個 Crate 的程式庫會以任何其他程式庫依附元件的形式參照它來定義:

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

rust_protobuf 模組的 Crate 結構

每個 protobuf 檔案都會在 crate 中以專屬模組的形式進行整理,並採用 protobuf 檔案的名稱。也就是說,所有 Proto 基本檔案名稱都不得重複。例如,請參考以下定義的 rust_protobuf

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

您可以透過下列方式存取這個 crate 中的不同 proto:

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

值得注意的 rust_protobuf 屬性

除了適用於所有模組的重要通用屬性,下方定義的屬性也是如此。這些方法對 Rust protobuf 模組特別重要,或會顯示 rust_protobuf 模組類型的特殊行為。

stem、name、crate_name

rust_protobuf 會產生程式庫變化版本,因此這三項屬性與 rust_library 模組的屬性相同。詳情請參閱 rust_library 屬性。

proto

這是用來產生 protobuf 介面的 protobuf 檔案相對路徑清單。基礎檔案名稱在 protosgrpc_protos 中不得重複。

grpc_protos

grpc_protos 包含 protobuf 檔案的相對路徑清單,這些檔案會定義 grpcs 以產生 protobuf 介面。基礎檔案名稱在 protosgrpc_protos 中不得重複。

source_stem

source_stem 是可納入的產生的來源檔案檔案名稱。即使您將繫結用做 Crate,這也是必要的欄位定義,因為 stem 屬性只會控制產生的程式庫變數輸出檔案名稱。與其他來源產生器不同,檔案名稱會加上前置字串「mod_」,最終檔案名稱為 mod_<stem>。這樣可避免與每個 proto 產生的來源發生名稱衝突。

此外,如同 bindgen 繫結模組,完整的程式庫屬性集合也可用於控制程式庫編譯作業,但這些屬性很少需要定義或變更。