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.

63 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. // ChangeModelFile is a value of ChangeModel
  27. ChangeModelFile ChangeModel = "File"
  28. )
  29. // IsValid returns true if the underlying string is one of the correct values.
  30. func (e ChangeModel) IsValid() bool {
  31. switch e {
  32. case ChangeModelCharacter, ChangeModelChannel, ChangeModelLog, ChangeModelPost, ChangeModelStory, ChangeModelTag, ChangeModelChapter, ChangeModelComment:
  33. return true
  34. }
  35. return false
  36. }
  37. func (e ChangeModel) String() string {
  38. return string(e)
  39. }
  40. // UnmarshalGQL unmarshals the underlying graphql value.
  41. func (e *ChangeModel) UnmarshalGQL(v interface{}) error {
  42. str, ok := v.(string)
  43. if !ok {
  44. return fmt.Errorf("enums must be strings")
  45. }
  46. *e = ChangeModel(str)
  47. if !e.IsValid() {
  48. return fmt.Errorf("%s is not a valid ChangeModel", str)
  49. }
  50. return nil
  51. }
  52. // MarshalGQL marshals the underlying graphql value.
  53. func (e ChangeModel) MarshalGQL(w io.Writer) {
  54. fmt.Fprint(w, strconv.Quote(e.String()))
  55. }