package sqlType

import (
	"database/sql"
	"encoding/json"
)

// type NullString struct {
// 	sql.NullString
// }

type NullString struct{ sql.NullString }

func NewNullString(val string) NullString {
	if val == "" {
		return NullString{}
	}

	return NullString{sql.NullString{Valid: true, String: val}}
}

func (ns NullString) MarshalJSON() ([]byte, error) {
	if !ns.Valid {
		return json.Marshal(nil)
	}

	return json.Marshal(ns.String)
}

func (ns *NullString) UnmarshalJSON(data []byte) error {
	if string(data) == "null" {
		ns.Valid = false
		return nil
	}

	if err := json.Unmarshal(data, &ns.String); err != nil {
		ns.Valid = true
		return err
	}

	return nil
}