ビルドシステムは、 rust_protobuf
モジュールタイプを介したprotobufインターフェースの生成をサポートします。
基本的なprotobufコード生成は、 rust-protobuf
クレートを使用して実行されます。この使用法に関するドキュメントを表示するには、対応するprotobufの例を含むGitHubプロジェクトページを参照してください。
gRPC protobufsもサポートされており、生成はgrpc-rs
クレートによって提供されます。この使用法に関するドキュメントを表示するには、対応するgRPCGitHubプロジェクトページのドキュメントを参照してください。
基本的なrust_protobufビルドの使用法
以下に、protobufモジュールを定義し、そのモジュールをクレートとして使用する例を示します。重要なプロパティとその使用方法の詳細については、「 rust_protobuf
の定義」セクションを参照してください。
サードパーティのコードなど、 include!()
マクロを介してprotobufで生成されたコードを使用する必要がある場合は、例について「ソースジェネレータ」ページを参照してください。 (この例ではrust_bindgen
モジュールを使用していますが、ソースを含める方法はすべてのソースジェネレーターで同じです。)
rust_protobufAndroid.bpモジュールの定義
Android.bpに関連するsrc/protos/my.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ファイルの名前を使用して、クレート内の独自のモジュールとして編成されます。これは、すべてのプロトベースファイル名が一意である必要があることを意味します。たとえば、次のように定義されたrust_protobuf
を考えてみましょう。
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
このクレート内のさまざまなプロトには、次のようにアクセスします。
// 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
モジュールタイプに固有の固有の動作を示します。
ステム、名前、crate_name
rust_protobuf
はライブラリバリアントを生成するため、これら3つのプロパティには、 rust_library
モジュールの場合と同じ要件があります。詳細については、 rust_library
のプロパティを参照してください。
プロトス
これは、protobufインターフェースを生成するためのprotobufファイルへの相対パスのリストです。ベースファイル名は、 protos
とgrpc_protos
全体で一意である必要があります。
grpc_protos
grpc_protos
は、protobufインターフェースを生成するためのgrpcs
を定義するprotobufファイルへの相対パスのリストで構成されています。ベースファイル名は、 protos
とgrpc_protos
全体で一意である必要があります。
source_stem
source_stem
は、含めることができる生成されたソースファイルのファイル名です。バインディングをクレートとして使用している場合でも、これは必須のフィールド定義です。これは、 stem
プロパティが、生成されたライブラリバリアントの出力ファイル名のみを制御するためです。他のソースジェネレータとは異なり、ファイル名にはmod_のプレフィックスが付けられ、最終的なファイル名はmod_ <stem>になります。これにより、各プロトから生成されたソースとの名前の衝突が防止されます。
さらに、bindgenバインディングモジュールと同様に、ライブラリのコンパイルを制御するためにライブラリプロパティのフルセットも利用できますが、これらを定義または変更する必要はほとんどありません。