gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/coderx/AnyToMap.go (about)

     1  package coderx
     2  
     3  import (
     4  	"fmt"
     5  	"gitee.com/zhongguo168a/gocodes/datax"
     6  	"gitee.com/zhongguo168a/gocodes/datax/jsonmap"
     7  	"gitee.com/zhongguo168a/gocodes/datax/reflectx"
     8  	"gitee.com/zhongguo168a/gocodes/datax/schemax"
     9  	"gitee.com/zhongguo168a/gocodes/myx/errorx"
    10  )
    11  
    12  func AnyToMap(document interface{}) (map[string]interface{}, error) {
    13  	switch d := document.(type) {
    14  	case map[string]interface{}:
    15  		return d, nil
    16  	case reflectx.IRefObject:
    17  		schema := schemax.GetDeclByKey(d.RefType())
    18  		m := map[string]interface{}{}
    19  		if schema == nil {
    20  			err := jsonmap.StructToMap(d, m)
    21  			if err != nil {
    22  				err = errorx.Wrap(err, fmt.Sprintf("jsonmap.StructToMap"), datax.M{"document": document})
    23  				return nil, err
    24  			}
    25  		} else {
    26  			err := NewRefToMap().SetSource(d).Write(m)
    27  			if err != nil {
    28  				err = errorx.Wrap(err, "MapToRef.Write")
    29  				return nil, err
    30  			}
    31  		}
    32  
    33  		return m, nil
    34  	default:
    35  		m := map[string]interface{}{}
    36  		err := jsonmap.StructToMap(d, m)
    37  		if err != nil {
    38  			err = errorx.Wrap(err, fmt.Sprintf("jsonmap.StructToMap"), datax.M{"document": document})
    39  			return nil, err
    40  		}
    41  
    42  		return m, nil
    43  	}
    44  }