Protobuf3 Any類型

原文鏈接:https://www.kaifaxueyuan.com/basic/protobuf3/any.html

  Any消息類型允許您將消息作爲嵌入類型,而不需要它們 .proto定義。Any包含任意序列化的消息(字節),以及一個URL,該URL充當該消息的全局唯一標識符並解析爲該消息的類型。要使用Any類型,你需要導入google/protobuf/any.proto.

import "google/protobuf/any.proto";

message ErrorStatus {
  string message = 1;
  repeated google.protobuf.Any details = 2;
}

  指定消息類型的默認類型URL是type.googleapis.com/packagename.messagename.

  不同的語言實現將支持運行時庫助手以typesafe方式打包和解壓縮ANY類型的值——例如,在Java中,任何類型都有特殊的pack()和unpack()訪問器,而在c++中有PackFrom()和UnpackTo()方法:

// Storing an arbitrary message type in Any.
NetworkErrorDetails details = ...;
ErrorStatus status;
status.add_details()->PackFrom(details);

// Reading an arbitrary message from Any.
ErrorStatus status = ...;
for (const Any& detail : status.details()) {
  if (detail.Is<NetworkErrorDetails>()) {
    NetworkErrorDetails network_error;
    detail.UnpackTo(&network_error);
    ... processing network_error ...
  }
}

  目前正在開發用於處理ANY類型的運行時庫。

  如果您已經熟悉proto2語法,ANY類型會替換擴展名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章