packet_encoder.go 785 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package kafka
  2. type packetEncoder interface {
  3. // primitives
  4. putInt8(in int8)
  5. putInt16(in int16)
  6. putInt32(in int32)
  7. putInt64(in int64)
  8. // arrays
  9. putInt32Array(in []int32)
  10. putArrayCount(in int)
  11. // misc
  12. putError(in KError)
  13. putString(in *string)
  14. putBytes(in *[]byte)
  15. putRaw(in []byte)
  16. // stackable
  17. push(in pushEncoder)
  18. pushLength32()
  19. pushCRC32()
  20. pop()
  21. }
  22. type pushEncoder interface {
  23. saveOffset(in int)
  24. reserveLength() int
  25. run(curOffset int, buf []byte)
  26. }
  27. func buildBytes(in encoder) (*[]byte, error) {
  28. if in == nil {
  29. return nil, nil
  30. }
  31. var prepEnc prepEncoder
  32. var realEnc realEncoder
  33. in.encode(&prepEnc)
  34. if prepEnc.err != nil {
  35. return nil, prepEnc.err
  36. }
  37. realEnc.raw = make([]byte, prepEnc.length)
  38. in.encode(&realEnc)
  39. return &(realEnc.raw), nil
  40. }