blob: 377bdc5863bc6356aa0776672d6d7f90ac80cce8 [file] [log] [blame]
Abhay Kumara2ae5992025-11-10 14:02:24 +00001package sarama
2
3type MemberIdentity struct {
4 MemberId string
5 GroupInstanceId *string
6}
7
8type LeaveGroupRequest struct {
9 Version int16
10 GroupId string
11 MemberId string // Removed in Version 3
12 Members []MemberIdentity // Added in Version 3
13}
14
15func (r *LeaveGroupRequest) setVersion(v int16) {
16 r.Version = v
17}
18
19func (r *LeaveGroupRequest) encode(pe packetEncoder) error {
20 if err := pe.putString(r.GroupId); err != nil {
21 return err
22 }
23 if r.Version < 3 {
24 if err := pe.putString(r.MemberId); err != nil {
25 return err
26 }
27 }
28 if r.Version >= 3 {
29 if err := pe.putArrayLength(len(r.Members)); err != nil {
30 return err
31 }
32 for _, member := range r.Members {
33 if err := pe.putString(member.MemberId); err != nil {
34 return err
35 }
36 if err := pe.putNullableString(member.GroupInstanceId); err != nil {
37 return err
38 }
39 pe.putEmptyTaggedFieldArray()
40 }
41 }
42
43 pe.putEmptyTaggedFieldArray()
44 return nil
45}
46
47func (r *LeaveGroupRequest) decode(pd packetDecoder, version int16) (err error) {
48 r.Version = version
49 if r.GroupId, err = pd.getString(); err != nil {
50 return
51 }
52 if r.Version < 3 {
53 if r.MemberId, err = pd.getString(); err != nil {
54 return
55 }
56 }
57 if r.Version >= 3 {
58 memberCount, err := pd.getArrayLength()
59 if err != nil {
60 return err
61 }
62 r.Members = make([]MemberIdentity, memberCount)
63 for i := 0; i < memberCount; i++ {
64 memberIdentity := MemberIdentity{}
65 if memberIdentity.MemberId, err = pd.getString(); err != nil {
66 return err
67 }
68 if memberIdentity.GroupInstanceId, err = pd.getNullableString(); err != nil {
69 return err
70 }
71 r.Members[i] = memberIdentity
72 _, err = pd.getEmptyTaggedFieldArray()
73 if err != nil {
74 return err
75 }
76 }
77 }
78
79 _, err = pd.getEmptyTaggedFieldArray()
80 return err
81}
82
83func (r *LeaveGroupRequest) key() int16 {
84 return apiKeyLeaveGroup
85}
86
87func (r *LeaveGroupRequest) version() int16 {
88 return r.Version
89}
90
91func (r *LeaveGroupRequest) headerVersion() int16 {
92 if r.Version >= 4 {
93 return 2
94 }
95 return 1
96}
97
98func (r *LeaveGroupRequest) isValidVersion() bool {
99 return r.Version >= 0 && r.Version <= 4
100}
101
102func (r *LeaveGroupRequest) isFlexible() bool {
103 return r.isFlexibleVersion(r.Version)
104}
105
106func (r *LeaveGroupRequest) isFlexibleVersion(version int16) bool {
107 return version >= 4
108}
109
110func (r *LeaveGroupRequest) requiredVersion() KafkaVersion {
111 switch r.Version {
112 case 4:
113 return V2_4_0_0
114 case 3:
115 return V2_4_0_0
116 case 2:
117 return V2_0_0_0
118 case 1:
119 return V0_11_0_0
120 case 0:
121 return V0_9_0_0
122 default:
123 return V2_4_0_0
124 }
125}