in offset_fetch_response.go [137:223]
func (r *OffsetFetchResponse) decode(pd packetDecoder, version int16) (err error) {
r.Version = version
isFlexible := version >= 6
if version >= 3 {
r.ThrottleTimeMs, err = pd.getInt32()
if err != nil {
return err
}
}
var numTopics int
if isFlexible {
numTopics, err = pd.getCompactArrayLength()
} else {
numTopics, err = pd.getArrayLength()
}
if err != nil {
return err
}
if numTopics > 0 {
r.Blocks = make(map[string]map[int32]*OffsetFetchResponseBlock, numTopics)
for i := 0; i < numTopics; i++ {
var name string
if isFlexible {
name, err = pd.getCompactString()
} else {
name, err = pd.getString()
}
if err != nil {
return err
}
var numBlocks int
if isFlexible {
numBlocks, err = pd.getCompactArrayLength()
} else {
numBlocks, err = pd.getArrayLength()
}
if err != nil {
return err
}
r.Blocks[name] = nil
if numBlocks > 0 {
r.Blocks[name] = make(map[int32]*OffsetFetchResponseBlock, numBlocks)
}
for j := 0; j < numBlocks; j++ {
id, err := pd.getInt32()
if err != nil {
return err
}
block := new(OffsetFetchResponseBlock)
err = block.decode(pd, version)
if err != nil {
return err
}
r.Blocks[name][id] = block
}
if isFlexible {
if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
return err
}
}
}
}
if version >= 2 {
kerr, err := pd.getInt16()
if err != nil {
return err
}
r.Err = KError(kerr)
}
if isFlexible {
if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
return err
}
}
return nil
}