generated from datumforge/go-template
-
Notifications
You must be signed in to change notification settings - Fork 7
/
tier.go
62 lines (51 loc) · 1.28 KB
/
tier.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package enums
import (
"fmt"
"io"
"strings"
)
type Tier string
var (
TierFree Tier = "FREE"
TierPro Tier = "PRO"
TierEnterprise Tier = "ENTERPRISE"
TierInvalid Tier = "INVALID"
)
// Values returns a slice of strings that represents all the possible values of the Tier enum.
// Possible default values are "FREE", "PRO" and "ENTERPRISE".
func (Tier) Values() (kinds []string) {
for _, s := range []Tier{TierFree, TierPro, TierEnterprise} {
kinds = append(kinds, string(s))
}
return
}
// String returns the Tier as a string
func (r Tier) String() string {
return string(r)
}
// ToTier returns the Tier based on string input
func ToTier(r string) *Tier {
switch r := strings.ToUpper(r); r {
case TierFree.String():
return &TierFree
case TierPro.String():
return &TierPro
case TierEnterprise.String():
return &TierEnterprise
default:
return &TierInvalid
}
}
// MarshalGQL implement the Marshaler interface for gqlgen
func (r Tier) MarshalGQL(w io.Writer) {
_, _ = w.Write([]byte(`"` + r.String() + `"`))
}
// UnmarshalGQL implement the Unmarshaler interface for gqlgen
func (r *Tier) UnmarshalGQL(v interface{}) error {
str, ok := v.(string)
if !ok {
return fmt.Errorf("wrong type for Tier, got: %T", v) //nolint:goerr113
}
*r = Tier(str)
return nil
}