duration.go 553 B

123456789101112131415161718192021222324252627282930313233
  1. package conf
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. )
  7. type Duration int64
  8. func (d *Duration) MarshalJSON() ([]byte, error) {
  9. dr := time.Duration(*d)
  10. return json.Marshal(dr.String())
  11. }
  12. func (d *Duration) UnmarshalJSON(b []byte) error {
  13. var v interface{}
  14. if err := json.Unmarshal(b, &v); err != nil {
  15. return err
  16. }
  17. switch value := v.(type) {
  18. case string:
  19. var err error
  20. dr, err := time.ParseDuration(value)
  21. if err != nil {
  22. return err
  23. }
  24. *d = Duration(dr)
  25. return nil
  26. default:
  27. return fmt.Errorf("invalid duration: %v", v)
  28. }
  29. }