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

0 ответов

Другие вопросы по тегам