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
}