encoder_decoder.go 728 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package encoding
  2. // Kafka Encoding
  3. type encoder interface {
  4. encode(pe packetEncoder)
  5. }
  6. func encode(in encoder) ([]byte, error) {
  7. if in == nil {
  8. return nil, nil
  9. }
  10. var prepEnc prepEncoder
  11. var realEnc realEncoder
  12. in.encode(&prepEnc)
  13. if prepEnc.err != nil {
  14. return nil, prepEnc.err
  15. }
  16. realEnc.raw = make([]byte, prepEnc.length)
  17. in.encode(&realEnc)
  18. return realEnc.raw, nil
  19. }
  20. // Kafka Decoding
  21. type decoder interface {
  22. decode(pd packetDecoder) error
  23. }
  24. func decode(buf []byte, in decoder) error {
  25. if buf == nil {
  26. return nil
  27. }
  28. helper := realDecoder{raw: buf}
  29. err := in.decode(&helper)
  30. if err != nil {
  31. return err
  32. }
  33. if helper.off != len(buf) {
  34. return DecodingError("unused data")
  35. }
  36. return nil
  37. }