encoder_decoder.go 821 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package kafka
  2. // Public Encoding
  3. // A simple interface for any type that can be encoded as an array of bytes
  4. // in order to be sent as the key or value of a Kafka message.
  5. type Encoder interface {
  6. Encode() ([]byte, error)
  7. }
  8. // Kafka Encoding
  9. type encoder interface {
  10. encode(pe packetEncoder)
  11. }
  12. func encode(in encoder) ([]byte, error) {
  13. if in == nil {
  14. return nil, nil
  15. }
  16. var prepEnc prepEncoder
  17. var realEnc realEncoder
  18. in.encode(&prepEnc)
  19. if prepEnc.err != nil {
  20. return nil, prepEnc.err
  21. }
  22. realEnc.raw = make([]byte, prepEnc.length)
  23. in.encode(&realEnc)
  24. return realEnc.raw, nil
  25. }
  26. // Kafka Decoding
  27. type decoder interface {
  28. decode(pd packetDecoder) error
  29. }
  30. func decode(buf []byte, in decoder) error {
  31. if buf == nil {
  32. return nil
  33. }
  34. helper := realDecoder{raw: buf}
  35. return in.decode(&helper)
  36. }