go
/
misc
1
0
Fork 0
misc/types/time.go

32 lines
771 B
Go

package types
import (
"amuz.es/src/go/misc"
jsoniter "github.com/json-iterator/go"
"time"
"github.com/pkg/errors"
)
type JSONTime time.Time
func (dttm JSONTime) MarshalJSON() ([]byte, error) {
stream := misc.JSONCodec.BorrowStream(nil)
defer misc.JSONCodec.ReturnStream(stream)
stream.WriteInt64(time.Time(dttm).UTC().Unix())
return append([]byte(nil), stream.Buffer()...), stream.Error
}
func (dttm *JSONTime) UnmarshalJSON(b []byte) error {
iterator := misc.JSONCodec.BorrowIterator(b)
defer misc.JSONCodec.ReturnIterator(iterator)
valueType := iterator.WhatIsNext()
switch valueType {
case jsoniter.NumberValue:
*dttm = JSONTime(time.Unix(iterator.ReadInt64(), 0))
return nil
default:
return errors.Errorf("%d is wrong type", valueType)
}
}