Google Protobuf,.proto文件查询

时间:2017-12-06 13:00:27

标签: protocol-buffers akka-persistence

我需要为以下CRMData案例类创建.proto文件。 我对以下数据类型感到困惑,即嵌套映射和用户定义的类(ShipToGroup)

case class CRMData(
       var customerShipToGroups : Map[String, Map[UUID, ShipToGroup]],
       var shipToGroups : Map[UUID, ShipToGroup],
       var shipToGroupLastUsed : UUID,
       var defaultShipToGroup : UUID
)

case class ShipToGroup(
    var customerUUID : String,
    var shipToGroupUUID : UUID,
    var name : String,
    var address : String,
    var companyName : String,
    var phoneNumber : Long,
    var city : String,
    var state : String,
    var zip : Int,
    var country : String,
    var landmark : String,
    var addressType : Int,
    var emailId : String,
    var addedAsBillingAddress : Boolean,
    var usedAsBillingAddress: Boolean,
    var isDefault : Boolean,
    var address2 : String)

1 个答案:

答案 0 :(得分:0)

你将遇到的最大问题是guids(我认为这是UUID)不是.proto中的原始类型,而.proto中的map<,>仅适用于字符串和整数类型。我将假设您很高兴使用string作为最接近的匹配(并且因为它在地图中有效)。

你不能做嵌套地图,但你可以有一张地图,其中每个元素都是拥有地图的东西。

结合这两个警告,您可以执行以下操作:

syntax = "proto3";
message CRMData {
    map<string, NeedAGoodName> customerShipToGroups = 1;
    map<string, ShipToGroup> shipToGroups = 2;
    string shipToGroupLastUsed = 3;
    string defaultShipToGroup = 4;
}
message NeedAGoodName {
    map<string, ShipToGroup> items = 1;
}
message ShipToGroup {
    string customerUUID = 1;
    string shipToGroupUUID = 2;
    // ...
    string address2 = 17;
}

注意:可能看起来像,就像我在整个过程中使用string一样,但这仅仅是因为具体的例子; .proto supports more primitives than that - 我希望在您的最终版本中看到一些booluint32。对于电话号码可能有一些fixed64,尽管字符串可能更常见。您可能还需要addressType的{​​{3}}。