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  }