func()

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
}