47 lines
694 B
Go
47 lines
694 B
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/pkg/errors"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type Role string
|
|
|
|
const (
|
|
RoleAdmin Role = "admin"
|
|
RoleUser Role = "user"
|
|
)
|
|
|
|
func (role Role) IsValid() bool {
|
|
switch role {
|
|
case RoleAdmin,
|
|
RoleUser:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (role Role) String() string {
|
|
return string(role)
|
|
}
|
|
|
|
func (role *Role) UnmarshalGQL(v interface{}) error {
|
|
str, ok := v.(string)
|
|
if !ok {
|
|
return errors.New("enums must be strings")
|
|
}
|
|
|
|
*role = Role(strings.ToLower(str))
|
|
if !role.IsValid() {
|
|
return errors.Errorf("%s is not a valid Role", str)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (role Role) MarshalGQL(w io.Writer) {
|
|
fmt.Fprint(w, strconv.Quote(role.String()))
|
|
}
|