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 }