encoder_decoder.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package sarama
  2. // Encoder is the interface that wraps the basic Encode method.
  3. // Anything implementing Encoder can be turned into bytes using Kafka's encoding rules.
  4. type encoder interface {
  5. encode(pe packetEncoder) error
  6. }
  7. // Encode takes an Encoder and turns it into bytes.
  8. func encode(in encoder) ([]byte, error) {
  9. if in == nil {
  10. return nil, nil
  11. }
  12. var prepEnc prepEncoder
  13. var realEnc realEncoder
  14. err := in.encode(&prepEnc)
  15. if err != nil {
  16. return nil, err
  17. }
  18. realEnc.raw = make([]byte, prepEnc.length)
  19. err = in.encode(&realEnc)
  20. if err != nil {
  21. return nil, err
  22. }
  23. return realEnc.raw, nil
  24. }
  25. // Decoder is the interface that wraps the basic Decode method.
  26. // Anything implementing Decoder can be extracted from bytes using Kafka's encoding rules.
  27. type decoder interface {
  28. decode(pd packetDecoder) error
  29. }
  30. // Decode takes bytes and a Decoder and fills the fields of the decoder from the bytes,
  31. // interpreted using Kafka's encoding rules.
  32. func decode(buf []byte, in decoder) error {
  33. if buf == nil {
  34. return nil
  35. }
  36. helper := realDecoder{raw: buf}
  37. err := in.decode(&helper)
  38. if err != nil {
  39. return err
  40. }
  41. if helper.off != len(buf) {
  42. return DecodingError{Info: "Length was invalid"}
  43. }
  44. return nil
  45. }