GraphQL API and utilities for the rpdata project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.7 KiB

  1. package models
  2. import (
  3. "fmt"
  4. "io"
  5. "strconv"
  6. )
  7. // ChangeModel describes a model related to the change.
  8. type ChangeModel string
  9. const (
  10. // ChangeModelCharacter is a value of ChangeModel
  11. ChangeModelCharacter ChangeModel = "Character"
  12. // ChangeModelChannel is a value of ChangeModel
  13. ChangeModelChannel ChangeModel = "Channel"
  14. // ChangeModelLog is a value of ChangeModel
  15. ChangeModelLog ChangeModel = "Log"
  16. // ChangeModelPost is a value of ChangeModel
  17. ChangeModelPost ChangeModel = "Post"
  18. // ChangeModelStory is a value of ChangeModel
  19. ChangeModelStory ChangeModel = "Story"
  20. // ChangeModelTag is a value of ChangeModel
  21. ChangeModelTag ChangeModel = "Tag"
  22. // ChangeModelChapter is a value of ChangeModel
  23. ChangeModelChapter ChangeModel = "Chapter"
  24. // ChangeModelComment is a value of ChangeModel
  25. ChangeModelComment ChangeModel = "Comment"
  26. )
  27. // IsValid returns true if the underlying string is one of the correct values.
  28. func (e ChangeModel) IsValid() bool {
  29. switch e {
  30. case ChangeModelCharacter, ChangeModelChannel, ChangeModelLog, ChangeModelPost, ChangeModelStory, ChangeModelTag, ChangeModelChapter, ChangeModelComment:
  31. return true
  32. }
  33. return false
  34. }
  35. func (e ChangeModel) String() string {
  36. return string(e)
  37. }
  38. // UnmarshalGQL unmarshals the underlying graphql value.
  39. func (e *ChangeModel) UnmarshalGQL(v interface{}) error {
  40. str, ok := v.(string)
  41. if !ok {
  42. return fmt.Errorf("enums must be strings")
  43. }
  44. *e = ChangeModel(str)
  45. if !e.IsValid() {
  46. return fmt.Errorf("%s is not a valid ChangeModel", str)
  47. }
  48. return nil
  49. }
  50. // MarshalGQL marshals the underlying graphql value.
  51. func (e ChangeModel) MarshalGQL(w io.Writer) {
  52. fmt.Fprint(w, strconv.Quote(e.String()))
  53. }