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