@@ -8,19 +8,12 @@ import (
8
8
"github.com/codecrafters-io/kafka-tester/protocol/decoder"
9
9
"github.com/codecrafters-io/kafka-tester/protocol/encoder"
10
10
"github.com/codecrafters-io/kafka-tester/protocol/errors"
11
+ "github.com/codecrafters-io/kafka-tester/protocol/utils"
11
12
"github.com/codecrafters-io/tester-utils/logger"
12
13
)
13
14
14
15
type RecordBatches []RecordBatch
15
16
16
- func (rbs RecordBatches ) getEncodedLength () int {
17
- encodedLength := 0
18
- for _ , rb := range rbs {
19
- encodedLength += rb .getEncodedLength ()
20
- }
21
- return encodedLength
22
- }
23
-
24
17
func (rbs RecordBatches ) Encode (pe * encoder.Encoder ) {
25
18
for _ , rb := range rbs {
26
19
rb .Encode (pe )
@@ -76,13 +69,6 @@ func (rb RecordBatch) Encode(pe *encoder.Encoder) {
76
69
pe .PutInt32At (int32 (computedChecksum ), crcStartOffset , 4 )
77
70
}
78
71
79
- func (rb RecordBatch ) getEncodedLength () int {
80
- encoder := encoder.Encoder {}
81
- encoder .Init (make ([]byte , 1024 ))
82
- rb .Encode (& encoder )
83
- return encoder .Offset ()
84
- }
85
-
86
72
func (rb * RecordBatch ) Decode (pd * decoder.Decoder , logger * logger.Logger , indentation int ) (err error ) {
87
73
if rb .BaseOffset , err = pd .GetInt64 (); err != nil {
88
74
if decodingErr , ok := err .(* errors.PacketDecodingError ); ok {
@@ -234,7 +220,7 @@ type Record struct {
234
220
}
235
221
236
222
func (r Record ) Encode (pe * encoder.Encoder ) {
237
- pe .PutVarint (int64 (r . getEncodedLength ( ))) // Length placeholder
223
+ pe .PutVarint (int64 (utils . GetEncodedLength ( r ))) // Length placeholder
238
224
// As this is variable length, we can't use placeholders and update later reliably.
239
225
// We need to have a value, close to the actual value, such that it takes the same space
240
226
// This is an approx value, the actual value will be computed at the end
@@ -254,28 +240,6 @@ func (r Record) Encode(pe *encoder.Encoder) {
254
240
}
255
241
}
256
242
257
- func (r Record ) getEncodedLength () int {
258
- encoder := encoder.Encoder {}
259
- encoder .Init (make ([]byte , 1024 ))
260
-
261
- encoder .PutInt8 (r .Attributes )
262
- encoder .PutVarint (r .TimestampDelta )
263
- encoder .PutVarint (int64 (r .OffsetDelta ))
264
- if string (r .Key ) == "null" {
265
- encoder .PutCompactBytes ([]byte {})
266
- } else {
267
- encoder .PutCompactBytes (r .Key )
268
- }
269
- encoder .PutVarint (int64 (len (r .Value )))
270
- encoder .PutRawBytes (r .Value )
271
- encoder .PutVarint (int64 (len (r .Headers )))
272
- for _ , header := range r .Headers {
273
- header .Encode (& encoder )
274
- }
275
-
276
- return encoder .Offset ()
277
- }
278
-
279
243
func (r * Record ) Decode (pd * decoder.Decoder , logger * logger.Logger , indentation int ) (err error ) {
280
244
length , err := pd .GetSignedVarint ()
281
245
if err != nil {
0 commit comments