@@ -49,12 +49,24 @@ type DescribeGroupsResponseMember struct {
4949 ClientHost string
5050
5151 // MemberMetadata contains metadata about this group member.
52- MemberMetadata [] byte
52+ MemberMetadata DescribeGroupsResponseMemberMetadata
5353
5454 // MemberAssignments contains the topic partitions that this member is assigned to.
5555 MemberAssignments DescribeGroupsResponseAssignments
5656}
5757
58+ // GroupMemberMetadata stores metadata associated with a group member.
59+ type DescribeGroupsResponseMemberMetadata struct {
60+ // Version is the version of the metadata.
61+ Version int
62+
63+ // Topics is the list of topics that the member is assigned to.
64+ Topics []string
65+
66+ // UserData is the user data for the member.
67+ UserData []byte
68+ }
69+
5870// GroupMemberAssignmentsInfo stores the topic partition assignment data for a group member.
5971type DescribeGroupsResponseAssignments struct {
6072 // Version is the version of the assignments data.
@@ -104,6 +116,10 @@ func (c *Client) DescribeGroups(
104116 }
105117
106118 for _ , member := range apiGroup .Members {
119+ decodedMetadata , err := decodeMemberMetadata (member .MemberMetadata )
120+ if err != nil {
121+ return nil , err
122+ }
107123 decodedAssignments , err := decodeMemberAssignments (member .MemberAssignment )
108124 if err != nil {
109125 return nil , err
@@ -114,7 +130,7 @@ func (c *Client) DescribeGroups(
114130 ClientID : member .ClientID ,
115131 ClientHost : member .ClientHost ,
116132 MemberAssignments : decodedAssignments ,
117- MemberMetadata : member . MemberMetadata ,
133+ MemberMetadata : decodedMetadata ,
118134 })
119135 }
120136 resp .Groups = append (resp .Groups , group )
@@ -298,6 +314,41 @@ func (t *describeGroupsResponseV0) readFrom(r *bufio.Reader, sz int) (remain int
298314 return
299315}
300316
317+ // decodeMemberMetadata converts raw metadata bytes to a
318+ // DescribeGroupsResponseMemberMetadata struct.
319+ func decodeMemberMetadata (rawMetadata []byte ) (DescribeGroupsResponseMemberMetadata , error ) {
320+ mm := DescribeGroupsResponseMemberMetadata {}
321+
322+ if len (rawMetadata ) == 0 {
323+ return mm , nil
324+ }
325+
326+ buf := bytes .NewBuffer (rawMetadata )
327+ bufReader := bufio .NewReader (buf )
328+ remain := len (rawMetadata )
329+
330+ var err error
331+ var version16 int16
332+
333+ if remain , err = readInt16 (bufReader , remain , & version16 ); err != nil {
334+ return mm , err
335+ }
336+ mm .Version = int (version16 )
337+
338+ if remain , err = readStringArray (bufReader , remain , & mm .Topics ); err != nil {
339+ return mm , err
340+ }
341+ if remain , err = readBytes (bufReader , remain , & mm .UserData ); err != nil {
342+ return mm , err
343+ }
344+
345+ if remain != 0 {
346+ return mm , fmt .Errorf ("Got non-zero number of bytes remaining: %d" , remain )
347+ }
348+
349+ return mm , nil
350+ }
351+
301352// decodeMemberAssignments converts raw assignment bytes to a DescribeGroupsResponseAssignments
302353// struct.
303354//
@@ -350,10 +401,7 @@ func decodeMemberAssignments(rawAssignments []byte) (DescribeGroupsResponseAssig
350401 }
351402
352403 if remain != 0 {
353- return ma , fmt .Errorf (
354- "Got non-zero number of bytes remaining in member assignments: %d" ,
355- remain ,
356- )
404+ return ma , fmt .Errorf ("Got non-zero number of bytes remaining: %d" , remain )
357405 }
358406
359407 return ma , nil
0 commit comments