github.com/influxdata/influxdb/v2@v2.7.6/duration.go (about) 1 package influxdb 2 3 import ( 4 "encoding/json" 5 "errors" 6 "time" 7 ) 8 9 // Duration is based on time.Duration to embed in any struct. 10 type Duration struct { 11 time.Duration 12 } 13 14 // MarshalJSON implements json.Marshaler interface. 15 func (d Duration) MarshalJSON() ([]byte, error) { 16 return json.Marshal(d.String()) 17 } 18 19 // UnmarshalJSON implements json.Unmarshaler interface. 20 func (d *Duration) UnmarshalJSON(b []byte) error { 21 var v interface{} 22 if err := json.Unmarshal(b, &v); err != nil { 23 return err 24 } 25 switch value := v.(type) { 26 case float64: 27 d.Duration = time.Duration(value) 28 return nil 29 case string: 30 var err error 31 d.Duration, err = time.ParseDuration(value) 32 if err != nil { 33 return err 34 } 35 return nil 36 default: 37 return errors.New("invalid duration") 38 } 39 }