package models

import (
	"database/sql"

	"emperror.dev/errors"
	"github.com/goccy/go-json"
)

type JsonNullString struct {
	sql.NullString
}

func (v JsonNullString) MarshalJSON() ([]byte, error) {
	if v.Valid {
		return json.Marshal(v.String)
	} else {
		return json.Marshal(nil)
	}
}

func (v *JsonNullString) UnmarshalJSON(data []byte) error {
	var s *string
	if err := json.Unmarshal(data, &s); err != nil {
		return errors.WithStack(err)
	}
	if s != nil {
		v.String = *s
	}
	v.Valid = s != nil
	return nil
}