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  }