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  }