github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/courier/enumeration/bool.go (about) 1 package enumeration 2 3 import ( 4 "encoding" 5 "encoding/json" 6 "errors" 7 "strings" 8 ) 9 10 // swagger:enum 11 type Bool uint8 12 13 var _ interface { 14 json.Unmarshaler 15 json.Marshaler 16 } = (*Bool)(nil) 17 18 const ( 19 BOOL_UNKNOWN Bool = iota 20 BOOL__TRUE // true 21 BOOL__FALSE // false 22 ) 23 24 func (v Bool) True() bool { 25 return v == BOOL__TRUE 26 } 27 28 func (Bool) Enums() map[int][]string { 29 return map[int][]string{ 30 int(BOOL__TRUE): {"TRUE", "true"}, 31 int(BOOL__FALSE): {"FALSE", "false"}, 32 } 33 } 34 35 func BoolFromBool(b bool) Bool { 36 if b { 37 return BOOL__TRUE 38 } 39 return BOOL__FALSE 40 } 41 42 var InvalidBool = errors.New("invalid Bool") 43 44 func ParseBoolFromString(s string) (Bool, error) { 45 switch s { 46 case "": 47 return BOOL_UNKNOWN, nil 48 case "FALSE": 49 return BOOL__FALSE, nil 50 case "TRUE": 51 return BOOL__TRUE, nil 52 } 53 return BOOL_UNKNOWN, InvalidBool 54 } 55 56 func ParseBoolFromLabelString(s string) (Bool, error) { 57 switch s { 58 case "": 59 return BOOL_UNKNOWN, nil 60 case "false": 61 return BOOL__FALSE, nil 62 case "true": 63 return BOOL__TRUE, nil 64 } 65 return BOOL_UNKNOWN, InvalidBool 66 } 67 68 func (v Bool) String() string { 69 switch v { 70 case BOOL_UNKNOWN: 71 return "" 72 case BOOL__FALSE: 73 return "FALSE" 74 case BOOL__TRUE: 75 return "TRUE" 76 } 77 return "UNKNOWN" 78 } 79 80 func (v Bool) Label() string { 81 switch v { 82 case BOOL_UNKNOWN: 83 return "" 84 case BOOL__FALSE: 85 return "false" 86 case BOOL__TRUE: 87 return "true" 88 } 89 return "UNKNOWN" 90 } 91 92 var _ interface { 93 encoding.TextMarshaler 94 encoding.TextUnmarshaler 95 json.Marshaler 96 json.Unmarshaler 97 } = (*Bool)(nil) 98 99 func (v Bool) MarshalText() ([]byte, error) { 100 str := v.Label() 101 if str == "" { 102 return []byte("null"), nil 103 } 104 if str == "UNKNOWN" { 105 return nil, InvalidBool 106 } 107 return []byte(str), nil 108 } 109 110 func (v *Bool) UnmarshalText(data []byte) (err error) { 111 s := strings.ToLower(strings.Trim(string(data), `"`)) 112 if s == "null" { 113 *v = BOOL_UNKNOWN 114 return 115 } 116 *v, err = ParseBoolFromLabelString(s) 117 return 118 } 119 120 func (v Bool) MarshalJSON() ([]byte, error) { 121 return v.MarshalText() 122 } 123 124 func (v *Bool) UnmarshalJSON(data []byte) (err error) { 125 return v.UnmarshalText(data) 126 }