times are now unix dates over ints

master
Bel LaPointe 2021-12-31 22:59:13 -05:00
parent ff77af9ed4
commit 7886723fe3
2 changed files with 27 additions and 5 deletions

View File

@ -2,7 +2,10 @@ package pttodo
import ( import (
"encoding/json" "encoding/json"
"errors"
"time" "time"
yaml "gopkg.in/yaml.v2"
) )
type TS int64 type TS int64
@ -23,5 +26,25 @@ func (ts TS) MarshalYAML() (interface{}, error) {
if ts == 0 { if ts == 0 {
ts = TS(time.Now().Unix()) ts = TS(time.Now().Unix())
} }
return int64(ts), nil t := time.Unix(int64(ts), 0)
return t.Format(time.UnixDate), nil
}
func (ts *TS) UnmarshalJSON(b []byte) error {
return yaml.Unmarshal(b, ts)
}
func (ts *TS) UnmarshalYAML(unmarshaller func(interface{}) error) error {
var n int64
if err := unmarshaller(&n); err == nil {
*ts = TS(n)
return nil
}
var s string
if err := unmarshaller(&s); err == nil {
t, err := time.Parse(time.UnixDate, s)
*ts = TS(t.Unix())
return err
}
return errors.New("illegal TS")
} }

View File

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"strings" "strings"
"testing" "testing"
"time"
yaml "gopkg.in/yaml.v2" yaml "gopkg.in/yaml.v2"
) )
@ -14,7 +13,7 @@ func TestTSMarshalYaml(t *testing.T) {
var ts TS var ts TS
if b, err := yaml.Marshal(TS(5)); err != nil { if b, err := yaml.Marshal(TS(5)); err != nil {
t.Fatal(err) t.Fatal(err)
} else if s := string(b); strings.TrimSpace(s) != `5` { } else if s := string(b); !strings.HasSuffix(strings.TrimSpace(s), ` 1969`) {
t.Fatal(s) t.Fatal(s)
} else if err := yaml.Unmarshal(b, &ts); err != nil { } else if err := yaml.Unmarshal(b, &ts); err != nil {
t.Fatal(err) t.Fatal(err)
@ -37,7 +36,7 @@ func TestTSMarshalYaml(t *testing.T) {
} }
func TestJSONTS(t *testing.T) { func TestJSONTS(t *testing.T) {
ts := TS(time.Now().Unix()) ts := TS(1234567890)
js, err := json.Marshal(ts) js, err := json.Marshal(ts)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -48,7 +47,7 @@ func TestJSONTS(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if ts != ts2 { if ts != ts2 {
t.Fatal(ts2) t.Fatalf("want: %v, got: %v", ts, ts2)
} }
if err := json.Unmarshal([]byte(`123`), &ts2); err != nil { if err := json.Unmarshal([]byte(`123`), &ts2); err != nil {