2017-12-06 12 views
1

次のCRMDataケースクラスのために.protoファイルを作成する必要があります。 私は、次のデータ型との混同を持っていますが、ネストされたマップやユーザー定義のクラス(ShipToGroup)Google Protobuf、.protoファイルクエリ

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) 

答えて

0

、すなわち、あなたが必要があるとしている最大の問題は、GUIDが(私は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にはenumが必要です。

+0

こんにちは、これは私のために働いて、今私は私が上で使用しているCRMDataをシリアル化する方法に立ち往生した。 –

関連する問題