diff --git a/util/config.go b/util/config.go new file mode 100644 index 0000000000..f6673fe8fd --- /dev/null +++ b/util/config.go @@ -0,0 +1,41 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "encoding/json" + "time" +) + +// ConfigDuration is an abstraction used to simplifying unmarshalling +// json into structs that contain time.Duration fields +type ConfigDuration struct { + time.Duration +} + +// UnmarshalJSON parses a time.Duration field from a string +func (cd ConfigDuration) UnmarshalJSON(data []byte) error { + s := "" + err := json.Unmarshal(data, &s) + if err != nil { + return err + } + d, err := time.ParseDuration(s) + if err != nil { + return err + } + cd.Duration = d + return nil +}