gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/schemax/init.go (about)

     1  package schemax
     2  
     3  import (
     4  	"gitee.com/zhongguo168a/gocodes/datax"
     5  	"gitee.com/zhongguo168a/gocodes/datax/schemax/basickind"
     6  	"gitee.com/zhongguo168a/gocodes/myx/errorx"
     7  )
     8  
     9  func InitObj(obj datax.M, decl *ClassDecl) (err error) {
    10  	return initObj(obj, decl)
    11  
    12  }
    13  
    14  func initObj(obj datax.M, decl *ClassDecl) (err error) {
    15  	for _, field := range decl.GetAllField() {
    16  		fname := field.Alias()
    17  		switch typ := field.Type.(type) {
    18  		case *ClassType:
    19  			if field.Value == "{}" {
    20  				obj[fname] = map[string]interface{}{}
    21  			} else {
    22  				var m map[string]interface{}
    23  				obj[fname] = m
    24  			}
    25  		case *ArrayType:
    26  			//obj[fname] = []interface{}{}
    27  		case *MapType:
    28  			if field.Value == "{}" {
    29  				obj[fname] = map[string]interface{}{}
    30  			} else {
    31  				var m map[string]interface{}
    32  				obj[fname] = m
    33  			}
    34  		case *EnumType:
    35  			iedecl := GetDeclByKey(typ.Decl)
    36  			if iedecl == nil {
    37  				return errorx.New("enum decl not found", datax.M{"fname": fname, "decl": typ.Decl})
    38  			}
    39  			edecl := iedecl.(*EnumDecl)
    40  			obj[fname] = basickind.DefaultValue(basickind.Kind(edecl.Kind))
    41  		case *BasicType:
    42  			obj[fname] = basickind.DefaultValue(typ.Kind)
    43  		}
    44  	}
    45  	return nil
    46  }