pase/store/nullables.go

52 lines
907 B
Go

package store
import (
"database/sql"
"encoding/json"
)
type NullTime struct {
sql.NullTime
}
func (nt NullTime) MarshalJSON() ([]byte, error) {
if nt.Valid {
return json.Marshal(nt.Time)
}
return []byte("null"), nil
}
func (nt *NullTime) UnmarshalJSON(data []byte) error {
if string(data) == "null" || string(data) == `""` {
nt.Valid = false
return nil
}
if err := json.Unmarshal(data, &nt.Time); err != nil {
return err
}
nt.Valid = true
return nil
}
type NullString struct {
sql.NullString
}
func (ns NullString) MarshalJSON() ([]byte, error) {
if ns.Valid {
return json.Marshal(ns.String)
}
return []byte("null"), nil
}
func (ns *NullString) UnmarshalJSON(data []byte) error {
if string(data) == "null" || string(data) == `""` {
ns.Valid = false
return nil
}
if err := json.Unmarshal(data, &ns.String); err != nil {
return err
}
ns.Valid = true
return nil
}