leavegroup.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package leavegroup
  2. import "github.com/segmentio/kafka-go/protocol"
  3. func init() {
  4. protocol.Register(&Request{}, &Response{})
  5. }
  6. type Request struct {
  7. // We need at least one tagged field to indicate that this is a "flexible" message
  8. // type.
  9. _ struct{} `kafka:"min=v4,max=v4,tag"`
  10. GroupID string `kafka:"min=v0,max=v2|min=v3,max=v4,compact"`
  11. MemberID string `kafka:"min=v0,max=v2"`
  12. Members []RequestMember `kafka:"min=v3,max=v4"`
  13. }
  14. func (r *Request) Prepare(apiVersion int16) {
  15. if apiVersion < 3 {
  16. if len(r.Members) > 0 {
  17. r.MemberID = r.Members[0].MemberID
  18. }
  19. }
  20. }
  21. type RequestMember struct {
  22. // We need at least one tagged field to indicate that this is a "flexible" message
  23. // type.
  24. _ struct{} `kafka:"min=v4,max=v4,tag"`
  25. MemberID string `kafka:"min=v3,max=v3|min=v4,max=v4,compact"`
  26. GroupInstanceID string `kafka:"min=v3,max=v3,nullable|min=v4,max=v4,nullable,compact"`
  27. }
  28. func (r *Request) ApiKey() protocol.ApiKey { return protocol.LeaveGroup }
  29. func (r *Request) Group() string { return r.GroupID }
  30. var (
  31. _ protocol.GroupMessage = (*Request)(nil)
  32. _ protocol.PreparedMessage = (*Request)(nil)
  33. )
  34. type Response struct {
  35. // We need at least one tagged field to indicate that this is a "flexible" message
  36. // type.
  37. _ struct{} `kafka:"min=v4,max=v4,tag"`
  38. ErrorCode int16 `kafka:"min=v0,max=v4"`
  39. ThrottleTimeMS int32 `kafka:"min=v1,max=v4"`
  40. Members []ResponseMember `kafka:"min=v3,max=v4"`
  41. }
  42. type ResponseMember struct {
  43. // We need at least one tagged field to indicate that this is a "flexible" message
  44. // type.
  45. _ struct{} `kafka:"min=v4,max=v4,tag"`
  46. MemberID string `kafka:"min=v3,max=v3|min=v4,max=v4,compact"`
  47. GroupInstanceID string `kafka:"min=v3,max=v3,nullable|min=v4,max=v4,nullable,compact"`
  48. ErrorCode int16 `kafka:"min=v3,max=v4"`
  49. }
  50. func (r *Response) ApiKey() protocol.ApiKey { return protocol.LeaveGroup }