web-dev-qa-db-fra.com

Puis-je définir une chaîne constante dans protobuf?

J'utilise les énumérations de protobuf pour partager des valeurs entre une application C++ et une application Java. De cette façon, les mêmes valeurs (int) sont partagées entre les langues et les valeurs sont disponibles lors de la compilation Puis-je faire quelque chose de similaire avec une chaîne en la définissant d'une manière ou d'une autre dans le .proto fichier?

13
ytoledano

Pas vraiment.

Il y a quelques hacks que vous pouvez utiliser. Ni l'un ni l'autre ne convient parfaitement, et (je pense) les deux disparaissent dans proto3:

  • Définissez un message avec un champ de chaîne et donnez-lui une valeur par défaut qui est votre valeur constante. Cependant, Protobuf 3 supprime apparemment les valeurs par défaut.
  • Utilisez "options personnalisées" , qui aurait probablement dû être appelé "annotations" car elles ressemblent beaucoup à des annotations dans Java ou d'autres langages. Vous pouvez déclarer une annotation de type chaîne, puis annotez une déclaration fictive avec votre annotation et utilisez la valeur constante. Cependant, les options personnalisées sont basées sur des extensions qui sont également supprimées dans proto3 , je suppose donc que les options personnalisées ont également été supprimées. (Voici la réponse proposée ici: https: //stackoverflow.com/a/11486640/2686899 .)

FWIW, Cap'n Proto , une alternative aux tampons de protocole, prend en charge les constantes. (Divulgation: je suis l'auteur de Cap'n Proto ainsi que de la plupart des Protobuf v2 de Google.)

19
Kenton Varda