blob: ccd27d5f5ece901c5030200926010a0d85781d47 [file] [log] [blame]
kesavandc71914f2022-03-25 11:19:03 +05301package sarama
2
3import (
4 "time"
5)
6
7// AlterClientQuotas Response (Version: 0) => throttle_time_ms [entries]
8// throttle_time_ms => INT32
9// entries => error_code error_message [entity]
10// error_code => INT16
11// error_message => NULLABLE_STRING
12// entity => entity_type entity_name
13// entity_type => STRING
14// entity_name => NULLABLE_STRING
15
16type AlterClientQuotasResponse struct {
17 ThrottleTime time.Duration // The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota.
18 Entries []AlterClientQuotasEntryResponse // The quota configuration entries altered.
19}
20
21type AlterClientQuotasEntryResponse struct {
22 ErrorCode KError // The error code, or `0` if the quota alteration succeeded.
23 ErrorMsg *string // The error message, or `null` if the quota alteration succeeded.
24 Entity []QuotaEntityComponent // The quota entity altered.
25}
26
27func (a *AlterClientQuotasResponse) encode(pe packetEncoder) error {
28 // ThrottleTime
29 pe.putInt32(int32(a.ThrottleTime / time.Millisecond))
30
31 // Entries
32 if err := pe.putArrayLength(len(a.Entries)); err != nil {
33 return err
34 }
35 for _, e := range a.Entries {
36 if err := e.encode(pe); err != nil {
37 return err
38 }
39 }
40
41 return nil
42}
43
44func (a *AlterClientQuotasResponse) decode(pd packetDecoder, version int16) error {
45 // ThrottleTime
46 throttleTime, err := pd.getInt32()
47 if err != nil {
48 return err
49 }
50 a.ThrottleTime = time.Duration(throttleTime) * time.Millisecond
51
52 // Entries
53 entryCount, err := pd.getArrayLength()
54 if err != nil {
55 return err
56 }
57 if entryCount > 0 {
58 a.Entries = make([]AlterClientQuotasEntryResponse, entryCount)
59 for i := range a.Entries {
60 e := AlterClientQuotasEntryResponse{}
61 if err = e.decode(pd, version); err != nil {
62 return err
63 }
64 a.Entries[i] = e
65 }
66 } else {
67 a.Entries = []AlterClientQuotasEntryResponse{}
68 }
69
70 return nil
71}
72
73func (a *AlterClientQuotasEntryResponse) encode(pe packetEncoder) error {
74 // ErrorCode
75 pe.putInt16(int16(a.ErrorCode))
76
77 // ErrorMsg
78 if err := pe.putNullableString(a.ErrorMsg); err != nil {
79 return err
80 }
81
82 // Entity
83 if err := pe.putArrayLength(len(a.Entity)); err != nil {
84 return err
85 }
86 for _, component := range a.Entity {
87 if err := component.encode(pe); err != nil {
88 return err
89 }
90 }
91
92 return nil
93}
94
95func (a *AlterClientQuotasEntryResponse) decode(pd packetDecoder, version int16) error {
96 // ErrorCode
97 errCode, err := pd.getInt16()
98 if err != nil {
99 return err
100 }
101 a.ErrorCode = KError(errCode)
102
103 // ErrorMsg
104 errMsg, err := pd.getNullableString()
105 if err != nil {
106 return err
107 }
108 a.ErrorMsg = errMsg
109
110 // Entity
111 componentCount, err := pd.getArrayLength()
112 if err != nil {
113 return err
114 }
115 if componentCount > 0 {
116 a.Entity = make([]QuotaEntityComponent, componentCount)
117 for i := 0; i < componentCount; i++ {
118 component := QuotaEntityComponent{}
119 if err := component.decode(pd, version); err != nil {
120 return err
121 }
122 a.Entity[i] = component
123 }
124 } else {
125 a.Entity = []QuotaEntityComponent{}
126 }
127
128 return nil
129}
130
131func (a *AlterClientQuotasResponse) key() int16 {
132 return 49
133}
134
135func (a *AlterClientQuotasResponse) version() int16 {
136 return 0
137}
138
139func (a *AlterClientQuotasResponse) headerVersion() int16 {
140 return 0
141}
142
143func (a *AlterClientQuotasResponse) requiredVersion() KafkaVersion {
144 return V2_6_0_0
145}