51 lines
782 B
Go
51 lines
782 B
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/pkg/errors"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type Answer string
|
|
|
|
const (
|
|
AnswerA Answer = "a"
|
|
AnswerB Answer = "b"
|
|
AnswerC Answer = "c"
|
|
AnswerD Answer = "d"
|
|
)
|
|
|
|
func (answer Answer) IsValid() bool {
|
|
switch answer {
|
|
case AnswerA,
|
|
AnswerB,
|
|
AnswerC,
|
|
AnswerD:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (answer Answer) String() string {
|
|
return string(answer)
|
|
}
|
|
|
|
func (answer *Answer) UnmarshalGQL(v interface{}) error {
|
|
str, ok := v.(string)
|
|
if !ok {
|
|
return errors.New("enums must be strings")
|
|
}
|
|
|
|
*answer = Answer(strings.ToLower(str))
|
|
if !answer.IsValid() {
|
|
return errors.Errorf("%s is not a valid Answer", str)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (answer Answer) MarshalGQL(w io.Writer) {
|
|
fmt.Fprint(w, strconv.Quote(answer.String()))
|
|
}
|