blasphem/internal/common/types.go

41 lines
857 B
Go
Raw Normal View History

2022-11-13 12:03:58 -05:00
package common
// Convenience types
import (
"fmt"
"strconv"
"strings"
"time"
)
type (
2022-11-13 12:04:34 -05:00
// PyTimeStamp is a python-style long nano timestamp
2022-11-13 12:03:58 -05:00
PyTimestamp time.Time
2022-11-13 12:04:34 -05:00
// KeepZero is a special float that keeps the trailing zero on marshal
2022-11-13 12:04:44 -05:00
KeepZero float64
2022-11-13 12:03:58 -05:00
)
func (f KeepZero) MarshalJSON() ([]byte, error) {
if float64(f) == float64(int(f)) {
return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil
}
return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil
}
const PytTimeFormat = "2006-01-02T15:04:05.999999-07:00"
func (t *PyTimestamp) MarshalJSON() ([]byte, error) {
rv := fmt.Sprintf("%q", time.Time(*t).Format(PytTimeFormat))
return []byte(rv), nil
}
func (t *PyTimestamp) UnmarshalJSON(b []byte) error {
s := strings.Trim(string(b), `"`)
tm, err := time.Parse(PytTimeFormat, s)
*t = PyTimestamp(tm)
return err
}