package kafka // Public Encoding // A simple interface for any type that can be encoded as an array of bytes // in order to be sent as the key or value of a Kafka message. type Encoder interface { Encode() ([]byte, error) } // Kafka Encoding type encoder interface { encode(pe packetEncoder) } func encode(in encoder) ([]byte, error) { if in == nil { return nil, nil } var prepEnc prepEncoder var realEnc realEncoder in.encode(&prepEnc) if prepEnc.err != nil { return nil, prepEnc.err } realEnc.raw = make([]byte, prepEnc.length) in.encode(&realEnc) return realEnc.raw, nil } // Kafka Decoding type decoder interface { decode(pd packetDecoder) error } func decode(buf []byte, in decoder) error { if buf == nil { return nil } helper := realDecoder{raw: buf} return in.decode(&helper) }