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.

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