Как я могу проверить, могу ли я распаковать любое сообщение protobuf для определенного типа сообщения в Javascript? - PullRequest
0 голосов
/ 28 декабря 2018

Рассмотрим следующее прото:

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

...