Crate json_patch

Source
Expand description

A JSON Patch (RFC 6902) and JSON Merge Patch (RFC 7396) implementation for Rust.

§Usage

Add this to your Cargo.toml:

[dependencies]
json-patch = "*"

§Examples

Create and patch document using JSON Patch:

#[macro_use]
use json_patch::{Patch, patch};
use serde_json::{from_value, json};

let mut doc = json!([
    { "name": "Andrew" },
    { "name": "Maxim" }
]);

let p: Patch = from_value(json!([
  { "op": "test", "path": "/0/name", "value": "Andrew" },
  { "op": "add", "path": "/0/happy", "value": true }
])).unwrap();

patch(&mut doc, &p).unwrap();
assert_eq!(doc, json!([
  { "name": "Andrew", "happy": true },
  { "name": "Maxim" }
]));

Create and patch document using JSON Merge Patch:

#[macro_use]
use json_patch::merge;
use serde_json::json;

let mut doc = json!({
  "title": "Goodbye!",
  "author" : {
    "givenName" : "John",
    "familyName" : "Doe"
  },
  "tags":[ "example", "sample" ],
  "content": "This will be unchanged"
});

let patch = json!({
  "title": "Hello!",
  "phoneNumber": "+01-123-456-7890",
  "author": {
    "familyName": null
  },
  "tags": [ "example" ]
});

merge(&mut doc, &patch);
assert_eq!(doc, json!({
  "title": "Hello!",
  "author" : {
    "givenName" : "John"
  },
  "tags": [ "example" ],
  "content": "This will be unchanged",
  "phoneNumber": "+01-123-456-7890"
}));

Structs§

AddOperation
JSON Patch ‘add’ operation representation
CopyOperation
JSON Patch ‘copy’ operation representation
MoveOperation
JSON Patch ‘move’ operation representation
Patch
Representation of JSON Patch (list of patch operations)
PatchError
This type represents all possible errors that can occur when applying JSON patch
RemoveOperation
JSON Patch ‘remove’ operation representation
ReplaceOperation
JSON Patch ‘replace’ operation representation
TestOperation
JSON Patch ‘test’ operation representation

Enums§

PatchErrorKind
This type represents all possible errors that can occur when applying JSON patch
PatchOperation
JSON Patch single patch operation

Functions§

diff
Diff two JSON documents and generate a JSON Patch (RFC 6902).
merge
Patch provided JSON document (given as serde_json::Value) in place with JSON Merge Patch (RFC 7396).
patch
Patch provided JSON document (given as serde_json::Value) in-place. If any of the patch is failed, all previous operations are reverted. In case of internal error resulting in panic, document might be left in inconsistent state.
patch_unsafe
Patch provided JSON document (given as serde_json::Value) in-place. Different from patch if any patch failed, the document is left in an inconsistent state. In case of internal error resulting in panic, document might be left in inconsistent state.