json.go 602 B

12345678910111213141516171819202122232425
  1. package ezdb
  2. import "encoding/json"
  3. // JSONMarshaler is a DocumentMarshaler that converts documents to JSON data.
  4. type JSONMarshaler[T any] struct {
  5. factory func() T
  6. }
  7. func (m *JSONMarshaler[T]) Factory() T {
  8. return m.factory()
  9. }
  10. func (m *JSONMarshaler[T]) Marshal(src T) ([]byte, error) {
  11. return json.Marshal(src)
  12. }
  13. func (m *JSONMarshaler[T]) Unmarshal(src []byte, dest T) error {
  14. return json.Unmarshal(src, dest)
  15. }
  16. // JSON creates a DocumentMarshaler that converts documents to JSON data.
  17. func JSON[T any](factory func() T) *JSONMarshaler[T] {
  18. return &JSONMarshaler[T]{factory: factory}
  19. }