gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/reflectx/ref-decl-class.go (about) 1 package reflectx 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax/schemax" 5 ) 6 7 type ClassDeclRef struct { 8 } 9 10 func (desc *ClassDeclRef) RefNew() IRefObject { 11 return &schemax.ClassDecl{} 12 } 13 14 func (desc *ClassDeclRef) RefType() string { 15 return "classdecl" 16 } 17 18 func (desc *ClassDeclRef) RefHas(field string) bool { 19 switch field { 20 case "Name": 21 return true 22 case "Parent": 23 return true 24 case "Fields": 25 return true 26 case "Package": 27 return true 28 case "Tags": 29 return true 30 31 } 32 return false 33 } 34 35 func (desc *ClassDeclRef) RefGet(target IRefObject, key string) (interface{}, bool) { 36 obj := target.(*schemax.ClassDecl) 37 switch key { 38 case "Name": 39 return obj.Name, false 40 case "Parent": 41 return obj.Parent, false 42 case "Fields": 43 return obj.Fields, false 44 case "Package": 45 return obj.Package, false 46 case "Tags": 47 return obj.Tags, false 48 } 49 return nil, true 50 } 51 func (desc *ClassDeclRef) RefSet(target IRefObject, key string, val interface{}) { 52 obj := target.(*schemax.ClassDecl) 53 switch key { 54 case "Name": 55 obj.Name = val.(string) 56 case "Parent": 57 obj.Parent = val.(string) 58 case "Fields": 59 obj.Fields = val.([]*schemax.Field) 60 case "Package": 61 obj.Package = val.(string) 62 case "Tags": 63 obj.Tags = val.(map[string]string) 64 } 65 return 66 } 67 func (desc *ClassDeclRef) RefSliceLength(target IRefObject, key string) int { 68 obj := target.(*schemax.ClassDecl) 69 switch key { 70 case "Fields": 71 return len(obj.Fields) 72 } 73 return 0 74 } 75 func (desc *ClassDeclRef) RefSliceGet(target IRefObject, key string, index int) (interface{}, bool) { 76 obj := target.(*schemax.ClassDecl) 77 switch key { 78 case "Fields": 79 val := obj.Fields[index] 80 return val, val == nil 81 } 82 return nil, true 83 } 84 func (desc *ClassDeclRef) RefSliceSet(target IRefObject, key string, index int, val interface{}) { 85 obj := target.(*schemax.ClassDecl) 86 switch key { 87 case "Fields": 88 obj.Fields[index] = val.(*schemax.Field) 89 } 90 return 91 } 92 93 func (desc *ClassDeclRef) RefSliceNew(field string, len int, cap int) interface{} { 94 switch field { 95 case "Fields": 96 return make([]*schemax.Field, len, cap) 97 } 98 return nil 99 } 100 101 func (ref *ClassDeclRef) RefMapGet(obj IRefObject, field string, key string) (interface{}, bool) { 102 target := obj.(*schemax.ClassDecl) 103 _ = target 104 switch field { 105 case "Tags": 106 val := target.Tags[key] 107 return val, false 108 109 } 110 111 return nil, false 112 } 113 114 func (ref *ClassDeclRef) RefMapSet(obj IRefObject, field string, key string, val interface{}) { 115 target := obj.(*schemax.ClassDecl) 116 _ = target 117 switch field { 118 case "Tags": 119 if target.Tags == nil { 120 target.Tags = map[string]string{} 121 } 122 target.Tags[key] = val.(string) 123 } 124 125 } 126 127 func (ref *ClassDeclRef) RefMapNew(field string) interface{} { 128 switch field { 129 case "Tags": 130 return make(map[string]string) 131 132 } 133 134 return nil 135 } 136 137 func (ref *ClassDeclRef) RefMapKeys(obj IRefObject, field string) (keys []string) { 138 target := obj.(*schemax.ClassDecl) 139 switch field { 140 case "Tags": 141 for key := range target.Tags { 142 keys = append(keys, key) 143 } 144 return 145 } 146 147 return 148 }