gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/versionx/cachez-object-version.go (about)

     1  package versionx
     2  
     3  import (
     4  	"gitee.com/zhongguo168a/gocodes/datax"
     5  	"gitee.com/zhongguo168a/gocodes/datax/mapx"
     6  )
     7  
     8  // 输出变化的字段
     9  func (s *Object) ToMapVersion() (r datax.M) {
    10  	r = datax.M{}
    11  	if s.enableVersion {
    12  		s.toMapVersion(r)
    13  		s.RefVersionComplete()
    14  	} else {
    15  		s.toMap(r)
    16  	}
    17  
    18  	return
    19  }
    20  func (s *Object) toMapVersion(target datax.M) {
    21  	versions := s.RefVersions()
    22  	lastVersion := s.lastVersion
    23  	for field, val := range s.data {
    24  		key := s.RefFieldPath() + "/" + field
    25  		if versions[key] <= lastVersion {
    26  			continue
    27  		}
    28  		switch v := val.(type) {
    29  		case datax.M:
    30  			if v != nil {
    31  				tm := datax.M{}
    32  				target[field] = tm
    33  				s.RefClass(field).toMapVersion(tm)
    34  			}
    35  		default:
    36  			target[field] = v
    37  		}
    38  	}
    39  }
    40  
    41  // 输出所有字段
    42  func (s *Object) ToMap() (r datax.M) {
    43  	r = datax.M{}
    44  	s.toMap(r)
    45  	return
    46  }
    47  
    48  func (s *Object) toMap(target datax.M) {
    49  	for field, val := range s.data {
    50  		switch v := val.(type) {
    51  		case datax.M:
    52  			if v != nil {
    53  				tm := datax.M{}
    54  				target[field] = tm
    55  				s.RefClass(field).toMap(tm)
    56  			}
    57  		default:
    58  			target[field] = v
    59  		}
    60  	}
    61  }
    62  
    63  // 输出指定字段
    64  func (s *Object) ToMapByField(fieldMap datax.M) (r datax.M) {
    65  	r = datax.M{}
    66  	toMapByField(s.data, fieldMap, r)
    67  	return r
    68  }
    69  
    70  func toMapByField(data, fieldMap datax.M, r datax.M) {
    71  	for field, fieldValue := range fieldMap {
    72  		dataVal := data[field]
    73  		switch v := dataVal.(type) {
    74  		case datax.M:
    75  			if v != nil {
    76  				tm := datax.M{}
    77  				r[field] = tm
    78  				if fieldValue == nil {
    79  					mapx.Copy(v, tm)
    80  				} else {
    81  					toMapByField(v, fieldValue.(datax.M), tm)
    82  				}
    83  			} else {
    84  				r[field] = nil
    85  			}
    86  		default:
    87  			r[field] = v
    88  		}
    89  	}
    90  	return
    91  }
    92  func toMapByData(data, fieldMap datax.M, r datax.M) {
    93  	for field, fieldValue := range fieldMap {
    94  		dataVal := data[field]
    95  		switch v := dataVal.(type) {
    96  		case datax.M:
    97  			if v != nil {
    98  				tm := datax.M{}
    99  				r[field] = tm
   100  				if fieldValue == nil {
   101  				} else {
   102  					toMapByField(v, fieldValue.(datax.M), tm)
   103  				}
   104  			} else {
   105  				r[field] = nil
   106  			}
   107  		default:
   108  			r[field] = v
   109  		}
   110  	}
   111  	return
   112  }