gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/schemax/decl-enum.go (about) 1 package schemax 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax/convertx" 5 "gitee.com/zhongguo168a/gocodes/datax/schemax/basickind" 6 ) 7 8 type EnumDecl struct { 9 // 10 Package string 11 12 Comments []string 13 // 14 Name string 15 // 16 Kind int 17 // 18 Fields []*Field 19 } 20 21 func (decl *EnumDecl) GetName() string { 22 return decl.Name 23 } 24 25 func (decl *EnumDecl) GetPackage() string { 26 return decl.Package 27 } 28 29 func (decl *EnumDecl) GetIdent() string { 30 return decl.Package + "." + decl.Name 31 } 32 33 func (decl *EnumDecl) RefType() string { 34 return "enumdecl" 35 } 36 37 func (decl *EnumDecl) ValueIndex(val string) int { 38 for index, field := range decl.Fields { 39 if field.Value == val { 40 return index 41 } 42 } 43 return -1 44 } 45 46 func (decl *EnumDecl) ValueToName(ival interface{}) (r string) { 47 for _, field := range decl.Fields { 48 switch basickind.Kind(decl.Kind) { 49 case basickind.String: 50 val, ok := ival.(string) 51 if ok == true { 52 if field.Value == val { 53 return field.Name 54 } 55 } 56 default: 57 val, ok := ival.(string) 58 if ok == true { 59 if field.Value == val { 60 return field.Name 61 } 62 } 63 } 64 65 } 66 67 return ival.(string) 68 } 69 70 func (decl *EnumDecl) NameIndex(name string) int { 71 for index, field := range decl.Fields { 72 if field.Name == name { 73 return index 74 } 75 } 76 return -1 77 } 78 79 func (decl *EnumDecl) NameToValueString(name string) (r string) { 80 for _, field := range decl.Fields { 81 if field.Name == name { 82 return field.Value 83 } 84 } 85 return 86 } 87 88 func (decl *EnumDecl) NameToValue(name string) (r interface{}) { 89 value := decl.NameToValueString(name) 90 switch basickind.Kind(decl.Kind) { 91 case basickind.String: 92 return value 93 default: 94 r = convertx.AnyToInt(value) 95 } 96 return 97 } 98 99 func (decl *EnumDecl) ConvertToValue(ival interface{}) (r interface{}) { 100 101 lastVal := func() (x string) { 102 sval := convertx.AnyToString(ival) 103 vindex := decl.ValueIndex(sval) 104 if vindex != -1 { 105 return sval 106 } 107 nindex := decl.NameIndex(sval) 108 if nindex != -1 { 109 return decl.NameToValueString(sval) 110 } 111 112 return sval 113 }() 114 switch basickind.Kind(decl.Kind) { 115 case basickind.Int8: 116 fallthrough 117 case basickind.Int16: 118 fallthrough 119 case basickind.Int32: 120 fallthrough 121 case basickind.Int64: 122 if lastVal == "" { 123 r = convertx.AnyToInt(ival) 124 } else { 125 r = convertx.AnyToInt(lastVal) 126 } 127 case basickind.Uint8: 128 fallthrough 129 case basickind.Uint16: 130 fallthrough 131 case basickind.Uint32: 132 fallthrough 133 case basickind.Uint64: 134 if lastVal == "" { 135 r = convertx.AnyToUint(ival) 136 } else { 137 r = convertx.AnyToUint(lastVal) 138 } 139 case basickind.String: 140 return lastVal 141 default: 142 143 } 144 145 return 146 }