Рассмотрим следующее прото:
message Payload {
google.protobuf.Any Object = 1;
}
message HelloMsg {
string Name = 1;
}
message HiMsg {
string Result = 1;
}
Таким образом, поле Object
в Payload
может содержать любое допустимое сообщение protobuf.
Мой потребитель написан на Javacript.Метод, который получает сообщение, знает, какой вид сообщения protobuf он хочет.Итак, когда этот метод-обработчик получает Payload
, я хочу знать, смогу ли я распаковать его в ожидаемое сообщение protobuf.Но как?
function myHandler(payload) {
expectedPaylaodType = HelloMsg;
// now how do I unpack, payload.getObject() to HelloMsg?
}
Я попытался выполнить следующее, но это не удалось:
let anyObj = payload.getObject();
let targetObj = expectedPaylaodType();
let unpackedObj = anyObj.unpack(anyObj.deserializeBinary, targetObj.getTypeName());
Это потому, что targetObj.getTypeName
не определено.
Если вышеприведенное невозможно, то я могу проверить с помощью поля typeURL?Любой объект имеет эту информацию.Но я не могу понять, по какому полю targetObj
я могу это проверить.Примерно так:
if (anyObj.getTypeUrl() == targetObj.typeUrl) {
}
targetObj.typeUrl
не существует, но я не уверен, с каким значением я могу сравнить его.