Google protobuf , .proto 文件查询
Google Protobuf , .proto file query
我需要为以下 CRMData 案例创建 .proto 文件 class。
我对以下数据类型感到困惑,即嵌套地图和用户定义的 class (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)
您将遇到的最大问题是 guid(我假设 UUID
是什么)不是 .proto 中的原始类型,而 map<,>
仅在 .proto 中适用于字符串和整数类型。我假设您很乐意使用 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 - I would expect to see some bool
and uint32
in your final version. Maybe some fixed64
for the phone number, although a string might be more common for that. You might also want an enum
用于 addressType
.
我需要为以下 CRMData 案例创建 .proto 文件 class。 我对以下数据类型感到困惑,即嵌套地图和用户定义的 class (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)
您将遇到的最大问题是 guid(我假设 UUID
是什么)不是 .proto 中的原始类型,而 map<,>
仅在 .proto 中适用于字符串和整数类型。我假设您很乐意使用 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 - I would expect to see some bool
and uint32
in your final version. Maybe some fixed64
for the phone number, although a string might be more common for that. You might also want an enum
用于 addressType
.