From 0f583218d4930fd7b98d93f13794daa2977bf0b3 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Mon, 13 Feb 2023 14:02:08 +0300 Subject: [PATCH 1/2] tmp Signed-off-by: Vasiliy Tolstov --- util/time/duration.go | 34 ++++++++++++++++++++++++++++++++++ util/time/duration_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/util/time/duration.go b/util/time/duration.go index da10d5f3..fa431d92 100644 --- a/util/time/duration.go +++ b/util/time/duration.go @@ -1,6 +1,7 @@ package time import ( + "encoding/json" "fmt" "time" ) @@ -46,3 +47,36 @@ func ParseDuration(s string) (time.Duration, error) { return td, err } + +func (d Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(time.Duration(d).String()) +} + +func (d *Duration) UnmarshalJSON(b []byte) error { + var v interface{} + if err := json.Unmarshal(b, &v); err != nil { + return err + } + switch value := v.(type) { + case float64: + *d = Duration(time.Duration(value)) + return nil + case string: + dv, err := time.ParseDuration(value) + if err != nil { + return err + } + *d = Duration(dv) + return nil + default: + return fmt.Errorf("invalid duration") + } +} + +/* +func (d Duration) MarshalYAML() (interface{}, error) { + return nil, nil +} + +func (d Duration) +*/ diff --git a/util/time/duration_test.go b/util/time/duration_test.go index 1fb62b5a..01cdd8bc 100644 --- a/util/time/duration_test.go +++ b/util/time/duration_test.go @@ -1,10 +1,37 @@ package time import ( + "bytes" + "encoding/json" "testing" "time" ) +func TestMarshalJSON(t *testing.T) { + d := Duration(10000000) + buf, err := json.Marshal(d) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(buf, []byte(`"10ms"`)) { + t.Fatalf("invalid duration: %s != %s", buf, `"10ms"`) + } +} + +func TestUnmarshalJSON(t *testing.T) { + type str struct { + TTL Duration `json:"ttl"` + } + v := &str{} + + err := json.Unmarshal([]byte(`{"ttl":"10ms"}`), v) + if err != nil { + t.Fatal(err) + } else if v.TTL != 10000000 { + t.Fatalf("invalid duration %v != 10000000", v.TTL) + } +} + func TestParseDuration(t *testing.T) { var td time.Duration var err error From b07806b9a1eba53f6ed1d826d0ff9d379f824226 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Mon, 13 Feb 2023 14:03:02 +0300 Subject: [PATCH 2/2] tmp Signed-off-by: Vasiliy Tolstov --- util/time/duration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/time/duration.go b/util/time/duration.go index fa431d92..ae2b716f 100644 --- a/util/time/duration.go +++ b/util/time/duration.go @@ -78,5 +78,5 @@ func (d Duration) MarshalYAML() (interface{}, error) { return nil, nil } -func (d Duration) +func (d Duration) UnmarshalYAML(fn func(interface{}) error) error */