Protobufモジュール

ビルドシステムは、 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ファイルへの相対パスのリストです。ベースファイル名は、 protosgrpc_protos全体で一意である必要があります。

grpc_protos

grpc_protosは、protobufインターフェースを生成するためのgrpcsを定義するprotobufファイルへの相対パスのリストで構成されています。ベースファイル名は、 protosgrpc_protos全体で一意である必要があります。

source_stem

source_stemは、含めることができる生成されたソースファイルのファイル名です。バインディングをクレートとして使用している場合でも、これは必須のフィールド定義です。これは、 stemプロパティが、生成されたライブラリバリアントの出力ファイル名のみを制御するためです。他のソースジェネレータとは異なり、ファイル名にはmod_のプレフィックスが付けられ、最終的なファイル名はmod_ <stem>になります。これにより、各プロトから生成されたソースとの名前の衝突が防止されます。

さらに、bindgenバインディングモジュールと同様に、ライブラリのコンパイルを制御するためにライブラリプロパティのフルセットも利用できますが、これらを定義または変更する必要はほとんどありません。