prep_encoder.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package sarama
  2. import (
  3. "encoding/binary"
  4. "math"
  5. )
  6. type prepEncoder struct {
  7. length int
  8. }
  9. // primitives
  10. func (pe *prepEncoder) putInt8(in int8) {
  11. pe.length += binary.Size(in)
  12. }
  13. func (pe *prepEncoder) putInt16(in int16) {
  14. pe.length += binary.Size(in)
  15. }
  16. func (pe *prepEncoder) putInt32(in int32) {
  17. pe.length += binary.Size(in)
  18. }
  19. func (pe *prepEncoder) putInt64(in int64) {
  20. pe.length += binary.Size(in)
  21. }
  22. func (pe *prepEncoder) putArrayLength(in int) error {
  23. if in > math.MaxInt32 {
  24. return EncodingError
  25. }
  26. pe.length += 4
  27. return nil
  28. }
  29. // arrays
  30. func (pe *prepEncoder) putBytes(in []byte) error {
  31. pe.length += 4
  32. if in == nil {
  33. return nil
  34. }
  35. if len(in) > math.MaxInt32 {
  36. return EncodingError
  37. }
  38. pe.length += len(in)
  39. return nil
  40. }
  41. func (pe *prepEncoder) putString(in string) error {
  42. pe.length += 2
  43. if len(in) > math.MaxInt16 {
  44. return EncodingError
  45. }
  46. pe.length += len(in)
  47. return nil
  48. }
  49. func (pe *prepEncoder) putInt32Array(in []int32) error {
  50. err := pe.putArrayLength(len(in))
  51. if err != nil {
  52. return err
  53. }
  54. pe.length += 4 * len(in)
  55. return nil
  56. }
  57. // stackable
  58. func (pe *prepEncoder) push(in pushEncoder) {
  59. pe.length += in.reserveLength()
  60. }
  61. func (pe *prepEncoder) pop() error {
  62. return nil
  63. }