func()

in metadata_request.go [108:194]


func (r *MetadataRequest) decode(pd packetDecoder, version int16) (err error) {
	r.Version = version
	if r.Version < 9 {
		size, err := pd.getInt32()
		if err != nil {
			return err
		}
		if size > 0 {
			r.Topics = make([]string, size)
			for i := range r.Topics {
				topic, err := pd.getString()
				if err != nil {
					return err
				}
				r.Topics[i] = topic
			}
		}
	} else if r.Version == 9 {
		size, err := pd.getCompactArrayLength()
		if err != nil {
			return err
		}
		if size > 0 {
			r.Topics = make([]string, size)
		}
		for i := range r.Topics {
			topic, err := pd.getCompactString()
			if err != nil {
				return err
			}
			r.Topics[i] = topic
			if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
				return err
			}
		}
	} else { // version 10+
		size, err := pd.getCompactArrayLength()
		if err != nil {
			return err
		}

		if size > 0 {
			r.Topics = make([]string, size)
		}
		for i := range r.Topics {
			if _, err = pd.getRawBytes(16); err != nil { // skip UUID
				return err
			}
			topic, err := pd.getCompactNullableString()
			if err != nil {
				return err
			}
			if topic != nil {
				r.Topics[i] = *topic
			}

			if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
				return err
			}
		}
	}

	if r.Version >= 4 {
		if r.AllowAutoTopicCreation, err = pd.getBool(); err != nil {
			return err
		}
	}

	if r.Version > 7 {
		includeClusterAuthz, err := pd.getBool()
		if err != nil {
			return err
		}
		r.IncludeClusterAuthorizedOperations = includeClusterAuthz
		includeTopicAuthz, err := pd.getBool()
		if err != nil {
			return err
		}
		r.IncludeTopicAuthorizedOperations = includeTopicAuthz
	}
	if r.Version > 8 {
		if _, err := pd.getEmptyTaggedFieldArray(); err != nil {
			return err
		}
	}
	return nil
}