J'ai un message protobuf qui , lorsqu'il est converti en chaîne en utilisant des TextFormat.printToString()
regards comme ci - dessous: -
deploymentDef {
id: "PX3C1ED"
default: true
type: ONPREM
limits {
clusterSize: 3
limits {
numVMs: 18000
numVMsWithFlows: 18000
activeFlows: 6000000
totalFlows: 24000000
flowPlanning: 4000000
numDevices: 40
}
}
isEnterprise: false
brickSize: XLARGE
clusterSize: 3
description: "Default Role, Non-Enterprise, App-Discovery and Vf services stopped"
}
La définition de proto ressemble ci-dessous
message DeploymentDef {
optional string id = 1;
optional bool default = 2;
optional DeploymentType type = 3;
optional PlatformClusterLimits limits = 4;
repeated Role roles = 5;
optional bool isEnterprise = 6;
optional Configs overrides = 7;
optional BrickSize brickSize = 8;
optional int32 clusterSize = 9;
optional string description = 10;
}
Est - il possible d'afficher description
comme premier champ lors de la conversion du proto message à chaîne à l' aide TextFormat.printToString()
?
Comme vous le savez probablement en ce moment, le message est codé dans l'ordre des champs - l'ordre des balises. Ceci est garanti par la Message#getAllFields()
méthode
est la garantie d'une carte triée, donc itérer sur elle retourne les champs dans l'ordre par numéro de champ
Par conséquent, si vous avez besoin de votre champ de description pour être le premier, vous aurez besoin soit de désapprouver et déplacer tous les champs 1-9 aux numéros 11-19, ou désapprouver le description
champ, et créer un nouveau message semblable à ceci:
message Deployment {
optional string description = 1;
required DeploymentDef deploymentDef = 2;
}
Désolé, il n'y a pas beaucoup de meilleures options, l'ordre des champs dans protobuf est (par la conception) pas très important / personnalisable.