区块链当中Protobuf 3完整示例

Protobuf 3完整示例

 

syntax = "proto3";
import "google/protobuf/any.proto";
package XBruce.Protobuf;

service SearchService {
  rpc GetBooks(GetBooksRequest) returns (GetBooksResponse);
}

message Book
{
    enum BookType{
      reserved 2, 15, 9 to 11, 40 to max;
      reserved "Chinese", "English";
      UNIVERSAL = 0;
      WEB = 1;
      LOCAL = 3;
      NEWS = 4;
      PRODUCTS = 5;
    }
    message BookWriter{
      string name = 1;
      string tel = 2;
    }
    string name = 1;
    int32 pages = 2;
    float price = 3;
    bytes content = 4;
    google.protobuf.Any object = 5;
    repeated BookWriter authors = 6;
    reserved 7;
}

message GetBooksRequest{
  int requestId = 1;
  Book.BookType book_type = 2;
  Book.BookWriter author = 3;
}

message GetBooksResponse{
  int requestId = 1;
  map<string, Book> books= 2;
}

map使用注意事项:

key_type 可以是任何 int 或者 string 类型(任何的标量类型,具体可以见上面标量类型对应表格,但是要除去 float、double 和 bytes)
枚举值也不能作为 key。
key_type 可以是除去 map 以外的任何类型。
需要特别注意的是 :
map 是不能用 repeated 修饰的。
线性数组和 map 迭代顺序的是不确定的,所以你不能依靠你的map 是在一个特定的顺序。
为 .proto 生成文本格式时,map 按 key 排序。数字的 key 按数字排序。
从数组中解析或合并时,如果有重复的 key,则使用所看到的最后一个 key(覆盖原则)。从文本格式解析映射时,如果有重复的 key,解析可能会失败。
Protocol Buffer 虽然不支持 map 类型的数组,但是可以转换一下,用以下思路实现 maps 数组:

message MapFieldEntry {
  key_type key = 1;
  value_type value = 2;
}
repeated MapFieldEntry map_field = N;

message 采用驼峰命名法。message 首字母大写开头。字段名采用下划线分隔法命名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值