summaryrefslogtreecommitdiff
path: root/golang/pkg/api/duration.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--golang/pkg/api/duration.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/golang/pkg/api/duration.go b/golang/pkg/api/duration.go
new file mode 100644
index 0000000..c2ba1fd
--- /dev/null
+++ b/golang/pkg/api/duration.go
@@ -0,0 +1,38 @@
+package api
+
+import (
+ "encoding/json"
+ "errors"
+ "time"
+)
+
+type Duration time.Duration
+
+func (d *Duration) Duration() time.Duration {
+ return time.Duration(*d)
+}
+
+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:
+ tmp, err := time.ParseDuration(value)
+ if err != nil {
+ return err
+ }
+ *d = Duration(tmp)
+ return nil
+ default:
+ return errors.New("invalid duration")
+ }
+}