Merge branch '10200-cwl-crunch-script' closes #10200
[arvados.git] / sdk / go / arvados / duration.go
index 1639c5852a6573ca2f51deb0080558cec587e464..a64eaacf8347eb2d6937c84e2c1b0598994ce937 100644 (file)
@@ -13,9 +13,7 @@ type Duration time.Duration
 // UnmarshalJSON implements json.Unmarshaler
 func (d *Duration) UnmarshalJSON(data []byte) error {
        if data[0] == '"' {
-               dur, err := time.ParseDuration(string(data[1 : len(data)-1]))
-               *d = Duration(dur)
-               return err
+               return d.Set(string(data[1 : len(data)-1]))
        }
        return fmt.Errorf("duration must be given as a string like \"600s\" or \"1h30m\"")
 }
@@ -29,3 +27,15 @@ func (d *Duration) MarshalJSON() ([]byte, error) {
 func (d Duration) String() string {
        return time.Duration(d).String()
 }
+
+// Duration returns a time.Duration
+func (d Duration) Duration() time.Duration {
+       return time.Duration(d)
+}
+
+// Value implements flag.Value
+func (d *Duration) Set(s string) error {
+       dur, err := time.ParseDuration(s)
+       *d = Duration(dur)
+       return err
+}