encoder.go 561 B

123456789101112131415161718192021222324
  1. package exporter
  2. import "encoding"
  3. // Encoder[T] is a generic interface for encoding an instance of a T type into a byte slice.
  4. type Encoder[T any] interface {
  5. Encode(*T) ([]byte, error)
  6. }
  7. type BinaryMarshalerPtr[T any] interface {
  8. encoding.BinaryMarshaler
  9. *T
  10. }
  11. type BingenEncoder[T any, U BinaryMarshalerPtr[T]] struct{}
  12. func NewBingenEncoder[T any, U BinaryMarshalerPtr[T]]() Encoder[T] {
  13. return new(BingenEncoder[T, U])
  14. }
  15. func (b *BingenEncoder[T, U]) Encode(data *T) ([]byte, error) {
  16. var bingenData U = data
  17. return bingenData.MarshalBinary()
  18. }