Я ищу язык запросов, похожий на xpath, для сообщений protobuf. Например, для показанного ниже сообщения Person [заимствовано из руководства разработчика]
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
Я хотел бы иметь такие методы, как
XPBQuery.get(person, "$.id") ==> returns the id
XPBQuery.get(person, "$.name") ==> returns the name
XPBQuery.get(person, "$.phone.number[0]") ==> returns the first phone number
Один из способов — преобразовать прототип в Json и использовать API JsonPath/JsPath. Но каждый раз конвертировать в Json может быть дорого, особенно для больших объектов Proto.
Буду признателен за любую оказанную помощь.
Спасибо, Ирфан
com.google.protobuf.Message
в Java илиgoogle::protobuf::Reflection
в C++. - person Kenton Varda   schedule 15.02.2015