metadata.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package kafka
  2. type metadata struct {
  3. brokers []broker
  4. topics []topicMetadata
  5. brokerMap map[int32]*broker
  6. }
  7. func (m *metadata) encode(pe packetEncoder) {
  8. pe.putInt32(int32(len(m.brokers)))
  9. for i := range m.brokers {
  10. (&m.brokers[i]).encode(pe)
  11. }
  12. pe.putInt32(int32(len(m.topics)))
  13. for i := range m.topics {
  14. (&m.topics[i]).encode(pe)
  15. }
  16. }
  17. func (m *metadata) decode(pd packetDecoder) (err error) {
  18. n, err := pd.getArrayCount()
  19. if err != nil {
  20. return err
  21. }
  22. m.brokers = make([]broker, n)
  23. m.brokerMap = make(map[int32]*broker, n)
  24. for i := 0; i < n; i++ {
  25. err = (&m.brokers[i]).decode(pd)
  26. if err != nil {
  27. return err
  28. }
  29. m.brokerMap[m.brokers[i].nodeId] = &m.brokers[i]
  30. }
  31. n, err = pd.getArrayCount()
  32. if err != nil {
  33. return err
  34. }
  35. m.topics = make([]topicMetadata, n)
  36. for i := 0; i < n; i++ {
  37. err = (&m.topics[i]).decode(pd)
  38. if err != nil {
  39. return err
  40. }
  41. }
  42. return nil
  43. }
  44. func (m *metadata) brokerById(id int32) *broker {
  45. if m.brokerMap == nil {
  46. return nil
  47. }
  48. return m.brokerMap[id]
  49. }