MCPcopy
hub / github.com/segmentio/kafka-go / decodeMemberMetadata

Function decodeMemberMetadata

describegroups.go:168–224  ·  view source on GitHub ↗

decodeMemberMetadata converts raw metadata bytes to a DescribeGroupsResponseMemberMetadata struct. See https://github.com/apache/kafka/blob/2.4/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerProtocol.java#L49 for protocol details.

(rawMetadata []byte)

Source from the content-addressed store, hash-verified

166// See https://github.com/apache/kafka/blob/2.4/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerProtocol.java#L49
167// for protocol details.
168func decodeMemberMetadata(rawMetadata []byte) (DescribeGroupsResponseMemberMetadata, error) {
169 mm := DescribeGroupsResponseMemberMetadata{}
170
171 if len(rawMetadata) == 0 {
172 return mm, nil
173 }
174
175 buf := bytes.NewBuffer(rawMetadata)
176 bufReader := bufio.NewReader(buf)
177 remain := len(rawMetadata)
178
179 var err error
180 var version16 int16
181
182 if remain, err = readInt16(bufReader, remain, &version16); err != nil {
183 return mm, err
184 }
185 mm.Version = int(version16)
186
187 if remain, err = readStringArray(bufReader, remain, &mm.Topics); err != nil {
188 return mm, err
189 }
190 if remain, err = readBytes(bufReader, remain, &mm.UserData); err != nil {
191 return mm, err
192 }
193
194 if mm.Version == 1 && remain > 0 {
195 fn := func(r *bufio.Reader, size int) (fnRemain int, fnErr error) {
196 op := DescribeGroupsResponseMemberMetadataOwnedPartition{}
197 if fnRemain, fnErr = readString(r, size, &op.Topic); fnErr != nil {
198 return
199 }
200
201 ps := []int32{}
202 if fnRemain, fnErr = readInt32Array(r, fnRemain, &ps); fnErr != nil {
203 return
204 }
205
206 for _, p := range ps {
207 op.Partitions = append(op.Partitions, int(p))
208 }
209
210 mm.OwnedPartitions = append(mm.OwnedPartitions, op)
211 return
212 }
213
214 if remain, err = readArrayWith(bufReader, remain, fn); err != nil {
215 return mm, err
216 }
217 }
218
219 if remain != 0 {
220 return mm, fmt.Errorf("Got non-zero number of bytes remaining: %d", remain)
221 }
222
223 return mm, nil
224}
225

Callers 1

DescribeGroupsMethod · 0.85

Calls 7

readStringArrayFunction · 0.85
readBytesFunction · 0.85
readStringFunction · 0.85
readInt32ArrayFunction · 0.85
readArrayWithFunction · 0.85
readInt16Function · 0.70
NewReaderMethod · 0.65

Tested by

no test coverage detected