diff --git a/utils/nulltime.go b/utils/nulltime.go new file mode 100644 index 000000000..e5ec931fc --- /dev/null +++ b/utils/nulltime.go @@ -0,0 +1,34 @@ +package utils + +import ( + "database/sql/driver" + "fmt" + "time" +) + +type NullTime struct { + Time time.Time + Valid bool // Valid is true if Time is not NULL +} + +// Scan implements the Scanner interface. +func (nt *NullTime) Scan(value interface{}) error { + nt.Time, nt.Valid = value.(time.Time) + return nil +} + +// Value implements the driver Valuer interface. +func (nt NullTime) Value() (driver.Value, error) { + if !nt.Valid { + return nil, nil + } + return nt.Time, nil +} + +func (nt NullTime) MarshalJSON() ([]byte, error) { + if !nt.Valid { + return []byte("null"), nil + } + val := fmt.Sprintf("\"%s\"", nt.Time.Format(time.RFC3339)) + return []byte(val), nil +}