Как я могу проверить, могу ли я распаковать любое сообщение protobuf для определенного типа сообщения в Javascript?
Рассмотрим следующее прото:
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
не существует, но я не уверен, с каким значением я могу сравнить его.