gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/reflectx/ref-desc-type-func.go (about)

     1  package reflectx
     2  
     3  import (
     4  	"gitee.com/zhongguo168a/gocodes/datax/schemax"
     5  )
     6  
     7  type FuncTypeRef struct {
     8  }
     9  
    10  func (f *FuncTypeRef) RefNew() IRefObject {
    11  	return &schemax.FuncType{}
    12  }
    13  
    14  func (f *FuncTypeRef) RefType() string {
    15  	return "func"
    16  }
    17  
    18  func (f *FuncTypeRef) RefHas(field string) bool {
    19  	switch field {
    20  	case "Args":
    21  		return true
    22  	case "Results":
    23  		return true
    24  	}
    25  	return false
    26  }
    27  func (f *FuncTypeRef) RefGet(target IRefObject, FuncType string) (val interface{}, isNil bool) {
    28  	obj := target.(*schemax.FuncType)
    29  	switch FuncType {
    30  	case "Args":
    31  		return obj.Args, false
    32  	case "Results":
    33  		return obj.Results, false
    34  	}
    35  	return nil, true
    36  }
    37  
    38  func (f *FuncTypeRef) RefSet(target IRefObject, FuncType string, val interface{}) {
    39  	obj := target.(*schemax.FuncType)
    40  	switch FuncType {
    41  	case "Args":
    42  		obj.Args = val.([]*schemax.Field)
    43  	case "Results":
    44  		obj.Results = val.([]*schemax.Field)
    45  	}
    46  	return
    47  }
    48  
    49  func (desc *FuncTypeRef) RefSliceLength(target IRefObject, key string) int {
    50  	obj := target.(*schemax.FuncType)
    51  	switch key {
    52  	case "Args":
    53  		return len(obj.Args)
    54  	case "Results":
    55  		return len(obj.Results)
    56  	}
    57  	return 0
    58  }
    59  func (desc *FuncTypeRef) RefSliceGet(target IRefObject, key string, index int) (interface{}, bool) {
    60  	obj := target.(*schemax.FuncType)
    61  	switch key {
    62  	case "Args":
    63  		val := obj.Args[index]
    64  		return val, val == nil
    65  	case "Results":
    66  		val := obj.Results[index]
    67  		return val, val == nil
    68  	}
    69  	return nil, true
    70  }
    71  func (desc *FuncTypeRef) RefSliceSet(target IRefObject, key string, index int, val interface{}) {
    72  	obj := target.(*schemax.FuncType)
    73  	switch key {
    74  	case "Args":
    75  		obj.Args[index] = val.(*schemax.Field)
    76  	case "Results":
    77  		obj.Results[index] = val.(*schemax.Field)
    78  	}
    79  	return
    80  }
    81  
    82  func (desc *FuncTypeRef) RefSliceNew(field string, len int, cap int) interface{} {
    83  	switch field {
    84  	case "Args":
    85  		return make([]*schemax.Field, len, cap)
    86  	case "Results":
    87  		return make([]*schemax.Field, len, cap)
    88  	}
    89  	return nil
    90  }