From 581cac27aad06f940e936837b3f4e32dbb73d3ed Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 7 Apr 2021 12:03:13 +0200 Subject: [PATCH] Make types.UnixMilli an encoding.TextUnmarshaler --- pkg/types/unix_milli.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/types/unix_milli.go b/pkg/types/unix_milli.go index 5b38335b..f3d24e4f 100644 --- a/pkg/types/unix_milli.go +++ b/pkg/types/unix_milli.go @@ -3,6 +3,7 @@ package types import ( "database/sql" "database/sql/driver" + "encoding" "encoding/json" "errors" "github.com/icinga/icingadb/pkg/utils" @@ -28,6 +29,17 @@ func (t UnixMilli) MarshalJSON() ([]byte, error) { return []byte(strconv.FormatInt(utils.UnixMilli(time.Time(t)), 10)), nil } +// UnmarshalText implements the encoding.TextUnmarshaler interface. +func (t *UnixMilli) UnmarshalText(text []byte) error { + parsed, err := strconv.ParseFloat(string(text), 64) + if err != nil { + return err + } + + *t = UnixMilli(utils.FromUnixMilli(int64(parsed))) + return nil +} + // UnmarshalJSON implements the json.Unmarshaler interface. // Unmarshals from milliseconds. Supports JSON null. func (t *UnixMilli) UnmarshalJSON(data []byte) error { @@ -74,8 +86,9 @@ func (t UnixMilli) Value() (driver.Value, error) { // Assert interface compliance. var ( - _ json.Marshaler = (*UnixMilli)(nil) - _ json.Unmarshaler = (*UnixMilli)(nil) - _ sql.Scanner = (*UnixMilli)(nil) - _ driver.Valuer = (*UnixMilli)(nil) + _ json.Marshaler = (*UnixMilli)(nil) + _ encoding.TextUnmarshaler = (*UnixMilli)(nil) + _ json.Unmarshaler = (*UnixMilli)(nil) + _ sql.Scanner = (*UnixMilli)(nil) + _ driver.Valuer = (*UnixMilli)(nil) )