ビルドシステムは、rust_protobuf
モジュール タイプによる protobuf インターフェースの生成をサポートしています。
基本的な protobuf コード生成は rust-protobuf
のクレートで行われます。この使用法についてのドキュメントは、GitHub プロジェクト ページで、対応する protobuf の例をご覧ください。
gRPC protobuf もサポートされており、生成は grpc-rs
のクレートによって行われます。この使用法についてのドキュメントは、対応する gRPC の GitHub プロジェクト ページをご覧ください。
rust_protobuf ビルドの基本的な使用方法
以下に、protobuf モジュールを定義し、そのモジュールをクレートとして使用する例を示します。重要なプロパティと使用方法の詳細については、rust_protobuf
の定義セクションをご覧ください。
サードパーティのコードなど、include!()
マクロにより protobuf で生成されたコードを使用する必要がある場合は、ソース生成ツールページをご覧ください(この例では rust_bindgen
モジュールを使用していますが、ソースを取り込む手段は、すべてのソース生成ツールで同じです)。
rust_protobuf Android.bp モジュールを定義する
Android.bp から相対的な src/protos/my.proto
に 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",
}
このクレートを使用するライブラリは、他のライブラリ依存関係と同じように参照することで定義されます。
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
rust_protobuf モジュールのクレート構造
各 protobuf ファイルは、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",
}
このクレート内の異なる protos には、次のようにアクセスします。
// 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
はライブラリ バリアントを生成するため、この 3 つのプロパティには rust_library
モジュールと同じ要件があります。詳細については、rust_library
プロパティをご覧ください。
protos
これは、protobuf インターフェースを生成する protobuf ファイルへの相対パスのリストです。ベースファイル名は protos
と grpc_protos
の間で一意にする必要があります。
grpc_protos
grpc_protos
は、protobuf インターフェースを生成する grpcs
を定義する protobuf ファイルへの相対パスのリストで構成されています。ベースファイル名は protos
と grpc_protos
の間で一意にする必要があります。
source_stem
source_stem
は、インクルード可能な生成されるソースファイルのファイル名です。バインディングをクレートとして使用する場合でも、stem
プロパティは生成されるライブラリ バリアントの出力ファイル名のみを制御するため、これは必須のフィールド定義です。他のソース生成ツールとは異なり、ファイル名の先頭には mod_ が付加され、最終的なファイル名は mod_<stem> になります。これにより、各 proto から生成されたソースと名前の競合を防ぎます。
さらに、bindgen バインディング モジュールと同様に、ライブラリ プロパティのフルセットを使用してライブラリのコンパイルを制御することもできますが、定義や変更が必要になることはほとんどありません。