status.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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) MarshalJSON() ([]byte, error) {
  18. var strStatus string
  19. switch s {
  20. case None:
  21. strStatus = "none"
  22. case Failed:
  23. strStatus = "failed"
  24. case Success:
  25. strStatus = "success"
  26. case Syncing:
  27. strStatus = "syncing"
  28. case PreSyncing:
  29. strStatus = "pre-syncing"
  30. case Paused:
  31. strStatus = "paused"
  32. case Disabled:
  33. strStatus = "disabled"
  34. default:
  35. return []byte{}, errors.New("Invalid status value")
  36. }
  37. return json.Marshal(strStatus)
  38. }
  39. func (s *SyncStatus) UnmarshalJSON(v []byte) error {
  40. sv := string(v)
  41. switch sv {
  42. case `"none"`:
  43. *s = None
  44. case `"failed"`:
  45. *s = Failed
  46. case `"success"`:
  47. *s = Success
  48. case `"syncing"`:
  49. *s = Syncing
  50. case `"pre-syncing"`:
  51. *s = PreSyncing
  52. case `"paused"`:
  53. *s = Paused
  54. case `"disabled"`:
  55. *s = Disabled
  56. default:
  57. return fmt.Errorf("Invalid status value: %s", string(v))
  58. }
  59. return nil
  60. }