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  }