blob: d753957c97b45685e687f242d30a9a7220db23de [file] [log] [blame]
Abhay Kumar40252eb2025-10-13 13:25:53 +00001package sarama
2
3import "time"
4
5type HeartbeatResponse struct {
6 Version int16
7 ThrottleTime int32
8 Err KError
9}
10
11func (r *HeartbeatResponse) setVersion(v int16) {
12 r.Version = v
13}
14
15func (r *HeartbeatResponse) encode(pe packetEncoder) error {
16 if r.Version >= 1 {
17 pe.putInt32(r.ThrottleTime)
18 }
19 pe.putKError(r.Err)
20 pe.putEmptyTaggedFieldArray()
21 return nil
22}
23
24func (r *HeartbeatResponse) decode(pd packetDecoder, version int16) error {
25 var err error
26 r.Version = version
27 if r.Version >= 1 {
28 if r.ThrottleTime, err = pd.getInt32(); err != nil {
29 return err
30 }
31 }
32 r.Err, err = pd.getKError()
33 if err != nil {
34 return err
35 }
36
37 _, err = pd.getEmptyTaggedFieldArray()
38 return err
39}
40
41func (r *HeartbeatResponse) key() int16 {
42 return apiKeyHeartbeat
43}
44
45func (r *HeartbeatResponse) version() int16 {
46 return r.Version
47}
48
49func (r *HeartbeatResponse) headerVersion() int16 {
50 if r.Version >= 4 {
51 return 1
52 }
53 return 0
54}
55
56func (r *HeartbeatResponse) isValidVersion() bool {
57 return r.Version >= 0 && r.Version <= 4
58}
59
60func (r *HeartbeatResponse) isFlexible() bool {
61 return r.isFlexibleVersion(r.Version)
62}
63
64func (r *HeartbeatResponse) isFlexibleVersion(version int16) bool {
65 return version >= 4
66}
67
68func (r *HeartbeatResponse) requiredVersion() KafkaVersion {
69 switch r.Version {
70 case 4:
71 return V2_4_0_0
72 case 3:
73 return V2_3_0_0
74 case 2:
75 return V2_0_0_0
76 case 1:
77 return V0_11_0_0
78 case 0:
79 return V0_8_2_0
80 default:
81 return V2_3_0_0
82 }
83}
84
85func (r *HeartbeatResponse) throttleTime() time.Duration {
86 return time.Duration(r.ThrottleTime) * time.Millisecond
87}