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 }