diff --git a/v5/merge.go b/v5/merge.go index d60afad..9d9e0b7 100644 --- a/v5/merge.go +++ b/v5/merge.go @@ -111,15 +111,18 @@ var errBadMergeTypes = fmt.Errorf("Mismatched JSON Documents") // applying this resulting merged merge patch to a document yields the same // as merging each merge patch to the document in succession. func MergeMergePatches(patch1Data, patch2Data []byte) ([]byte, error) { - return doMergePatch(patch1Data, patch2Data, true) + return doMergePatch(patch1Data, patch2Data, true, NewApplyOptions()) } // MergePatch merges the patchData into the docData. func MergePatch(docData, patchData []byte) ([]byte, error) { - return doMergePatch(docData, patchData, false) + return doMergePatch(docData, patchData, false, NewApplyOptions()) +} +func MergePatchWithOptions(docData, patchData []byte, options *ApplyOptions) ([]byte, error) { + return doMergePatch(docData, patchData, false, options) } -func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { +func doMergePatch(docData, patchData []byte, mergeMerge bool, options *ApplyOptions) ([]byte, error) { if !json.Valid(docData) { return nil, ErrBadJSONDoc } @@ -128,8 +131,6 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { return nil, ErrBadJSONPatch } - options := NewApplyOptions() - doc := &partialDoc{ opts: options, } diff --git a/v5/merge_test.go b/v5/merge_test.go index bc0766d..6592c30 100644 --- a/v5/merge_test.go +++ b/v5/merge_test.go @@ -1,6 +1,8 @@ package jsonpatch import ( + "bytes" + "encoding/json" "fmt" "testing" ) @@ -695,3 +697,29 @@ func TestMergeMergePatches(t *testing.T) { } } } + +func TestMergePatchWithOptions(t *testing.T) { + b := &bytes.Buffer{} + enc := json.NewEncoder(b) + enc.SetEscapeHTML(false) + + v := struct { + X string + }{X: "&<>"} + + if err := enc.Encode(&v); err != nil { + t.Fatal(err) + } + target := []byte(`{"key1": "val1", "key2": "val2"}`) + + opts := NewApplyOptions() + opts.EscapeHTML = false + + modified, err := MergePatchWithOptions(b.Bytes(), target, opts) + if err != nil { + t.Fatal(err) + } + if !compareJSON(string(modified), `{"X":"&<>","key1":"val1","key2":"val2"}`) { + t.Fatalf("testMergePatchWithOptions fails for %s", string(modified)) + } +}