2
0

status.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package internal
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. )
  7. type SyncStatus uint8
  8. const (
  9. None SyncStatus = iota
  10. Failed
  11. Success
  12. Syncing
  13. PreSyncing
  14. Paused
  15. Disabled
  16. )
  17. func (s SyncStatus) String() string {
  18. switch s {
  19. case None:
  20. return "none"
  21. case Failed:
  22. return "failed"
  23. case Success:
  24. return "success"
  25. case Syncing:
  26. return "syncing"
  27. case PreSyncing:
  28. return "pre-syncing"
  29. case Paused:
  30. return "paused"
  31. case Disabled:
  32. return "disabled"
  33. default:
  34. return ""
  35. }
  36. }
  37. func (s SyncStatus) MarshalJSON() ([]byte, error) {
  38. strStatus := s.String()
  39. if strStatus == "" {
  40. return []byte{}, errors.New("Invalid status value")
  41. }
  42. return json.Marshal(strStatus)
  43. }
  44. func (s *SyncStatus) UnmarshalJSON(v []byte) error {
  45. sv := string(v)
  46. switch sv {
  47. case `"none"`:
  48. *s = None
  49. case `"failed"`:
  50. *s = Failed
  51. case `"success"`:
  52. *s = Success
  53. case `"syncing"`:
  54. *s = Syncing
  55. case `"pre-syncing"`:
  56. *s = PreSyncing
  57. case `"paused"`:
  58. *s = Paused
  59. case `"disabled"`:
  60. *s = Disabled
  61. default:
  62. return fmt.Errorf("Invalid status value: %s", string(v))
  63. }
  64. return nil
  65. }