X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c900f416c36cd74675c5bf4c33ad1dbe5d1e78fa..08123387faf00b0af64ea01f7196d8c5ca3fae1e:/sdk/go/arvados/duration.go diff --git a/sdk/go/arvados/duration.go b/sdk/go/arvados/duration.go index 1639c5852a..25eed010f2 100644 --- a/sdk/go/arvados/duration.go +++ b/sdk/go/arvados/duration.go @@ -1,3 +1,7 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: Apache-2.0 + package arvados import ( @@ -10,22 +14,32 @@ import ( // a number of nanoseconds. type Duration time.Duration -// UnmarshalJSON implements json.Unmarshaler +// 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\"") } -// MarshalJSON implements json.Marshaler +// MarshalJSON implements json.Marshaler. func (d *Duration) MarshalJSON() ([]byte, error) { return json.Marshal(d.String()) } -// String implements fmt.Stringer +// String implements fmt.Stringer. 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) +} + +// Set implements the flag.Value interface and sets the duration value by using time.ParseDuration to parse the string. +func (d *Duration) Set(s string) error { + dur, err := time.ParseDuration(s) + *d = Duration(dur) + return err +}