Le système de construction prend en charge la génération d'interfaces protobuf via le type de module rust_protobuf
.
La génération de code protobuf de base est effectuée avec la caisse rust-protobuf
. Pour afficher la documentation sur cette utilisation, consultez la page du projet GitHub avec les exemples de protobuf correspondants.
Les protobufs gRPC sont également pris en charge, avec une génération assurée par la caisse grpc-rs
. Pour afficher la documentation sur cette utilisation, consultez la documentation sur la page du projet gRPC GitHub correspondant.
Utilisation de base de la construction rust_protobuf
Ce qui suit fournit un exemple de définition d'un module protobuf et d'utilisation de ce module comme caisse. Plus de détails sur les propriétés importantes et la façon dont elles sont utilisées se trouvent dans la section Définition d'un rust_protobuf
.
Si vous devez utiliser du code généré par protobuf via une macro include!()
, comme pour du code tiers, consultez la page Générateurs de sources pour un exemple. (L'exemple utilise un module rust_bindgen
, mais le moyen d'inclusion de source est le même pour tous les générateurs de source.)
Définir un module rust_protobuf Android.bp
Supposons un proto dans src/protos/my.proto
par rapport à votre Android.bp ; le module est alors défini comme suit :
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",
}
Une bibliothèque qui utilise ce crate est définie en y faisant référence comme s'il s'agissait d'une autre dépendance de bibliothèque :
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
Structure de caisse des modules rust_protobuf
Chaque fichier protobuf est organisé comme son propre module au sein de la caisse, prenant le nom du fichier protobuf. Cela signifie que tous les noms de fichiers de base de proto doivent être uniques. Par exemple, prenons un rust_protobuf
défini comme suit :
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
Les différents protos de cette caisse seraient accessibles comme suit :
// 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
Propriétés notables de rust_protobuf
Les propriétés définies ci-dessous s'ajoutent aux propriétés communes importantes qui s'appliquent à tous les modules. Ceux-ci sont soit particulièrement importants pour les modules Rust protobuf, soit présentent un comportement unique spécifique au type de module rust_protobuf
.
tige, nom, nom_crate
rust_protobuf
produit des variantes de bibliothèque, donc les mêmes exigences existent pour ces trois propriétés que pour les modules rust_library
. Voir les propriétés rust_library
pour plus de détails.
protos
Il s'agit d'une liste de chemins relatifs vers les fichiers protobuf pour générer l'interface protobuf. Les noms de fichiers de base doivent être uniques entre protos
et grpc_protos
.
grpc_protos
Le grpc_protos
consiste en une liste de chemins relatifs vers les fichiers protobuf qui définissent grpcs
pour générer l'interface protobuf. Les noms de fichiers de base doivent être uniques entre protos
et grpc_protos
.
source_stem
source_stem
est le nom de fichier du fichier source généré qui peut être inclus. Il s'agit d'une définition de champ obligatoire, même si vous utilisez les liaisons comme caisse, puisque la propriété stem
contrôle uniquement le nom du fichier de sortie pour les variantes de bibliothèque générées. Contrairement aux autres générateurs de sources, le nom de fichier est préfixé par mod_ , ce qui donne le nom de fichier final mod_<stem> . Cela évite les collisions de noms avec les sources générées à partir de chaque proto.
De plus, comme le module de liaisons bindgen, l'ensemble complet des propriétés de la bibliothèque est également disponible pour contrôler la compilation de la bibliothèque, bien qu'il soit rarement nécessaire de les définir ou de les modifier.