duration.go 838 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package cloudflare
  2. import (
  3. "encoding/json"
  4. "time"
  5. )
  6. // Duration implements json.Marshaler and json.Unmarshaler for time.Duration
  7. // using the fmt.Stringer interface of time.Duration and time.ParseDuration.
  8. type Duration struct {
  9. time.Duration
  10. }
  11. // MarshalJSON encodes a Duration as a JSON string formatted using String.
  12. func (d Duration) MarshalJSON() ([]byte, error) {
  13. return json.Marshal(d.Duration.String())
  14. }
  15. // UnmarshalJSON decodes a Duration from a JSON string parsed using time.ParseDuration.
  16. func (d *Duration) UnmarshalJSON(buf []byte) error {
  17. var str string
  18. err := json.Unmarshal(buf, &str)
  19. if err != nil {
  20. return err
  21. }
  22. dur, err := time.ParseDuration(str)
  23. if err != nil {
  24. return err
  25. }
  26. d.Duration = dur
  27. return nil
  28. }
  29. var (
  30. _ = json.Marshaler((*Duration)(nil))
  31. _ = json.Unmarshaler((*Duration)(nil))
  32. )