2017-12-06 10 views
1

다음 CRMData 케이스 클래스에 대해 .proto 파일을 만들어야합니다. 나는 다음과 같은 데이터 유형과 혼란을 겪고 당신이 할 겁니다 가장 큰 문제는 GUID를 (나는 그 UUID이 무엇인지 가정) 아니라는 것이다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

중첩지도 및 사용자 정의 클래스 (ShipToGroup를) 즉, .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 일 수 있지만 그보다 더 일반적인 문자열 일 수 있습니다. addressTypeenum을 입력 할 수도 있습니다.

+0

안녕하세요, 저에게 감사드립니다. 지금은 위에 사용 된 CRMData를 직렬화하는 방법을 고수했습니다. –