internal/util/merge.go (26 lines of code) (raw):

package util import ( "encoding/json" "dario.cat/mergo" ) // DocumentMerge merges two arguments using their marshalled json // representations and returns the resulting data in a `map[string]interface{}` func DocumentMerge(a, b any, opts ...func(*mergo.Config)) (map[string]interface{}, error) { var aMap, bMap map[string]interface{} aBytes, err := json.Marshal(a) if err != nil { return nil, err } bBytes, err := json.Marshal(b) if err != nil { return nil, err } if err := json.Unmarshal(aBytes, &aMap); err != nil { return nil, err } if err := json.Unmarshal(bBytes, &bMap); err != nil { return nil, err } if err := mergo.Merge(&aMap, &bMap, opts...); err != nil { return nil, err } return aMap, nil }