Skip to content
forked from chanced/jsonptr

JSON Pointer (RFC 6901) implementation for Rust

License

Notifications You must be signed in to change notification settings

dwalker109/jsonptr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jsonptr - JSON Pointers for Rust

github crates.io docs.rs build status

Data structures and logic for resolving, assigning, and deleting by JSON Pointers (RFC 6901).

Usage

JSON Pointers can be created either with a slice of strings or directly from a properly encoded string representing a JSON Pointer.

Resolve

use jsonptr::{Pointer, Resolve, ResolveMut};
use serde_json::json;

fn main() {
    let mut data = json!({
        "foo": {
            "bar": "baz"
        }
    });

    let ptr = Pointer::new(&["foo", "bar"]);
    let bar = ptr.resolve(&data).unwrap();
    assert_eq!(bar, "baz");

    let bar = data.resolve(&ptr).unwrap();
    assert_eq!(bar, "baz");

    let ptr = Pointer::try_from("/foo/bar").unwrap();
    let mut bar = data.resolve_mut(&ptr).unwrap();
    assert_eq!(bar, "baz");
}

Assign

use jsonptr::{Pointer, Assign};
use serde_json::json;

fn main() {
    let ptr = Pointer::try_from("/foo/bar").unwrap();
    let mut data = json!({});
    let assignment = data.assign(&ptr, "qux");
    assert_eq!(data, json!({ "foo": { "bar": "qux" }}))
}

Delete

    use jsonptr::{Pointer, Delete};
    use serde_json::json;
fn main() {
    let mut data = json!({ "foo": { "bar": { "baz": "qux" } } });
    let ptr = Pointer::new(&["foo", "bar", "baz"]);
    assert_eq!(data.delete(&ptr), Ok(Some("qux".into())));
    assert_eq!(data, json!({ "foo": { "bar": {} } }));

    // unresolved pointers return Ok(None)
    let mut data = json!({});
    let ptr = Pointer::new(&["foo", "bar", "baz"]);
    assert_eq!(ptr.delete(&mut data), Ok(None));
    assert_eq!(data, json!({}));

    // replacing a root pointer replaces data with `Value::Null`
    let mut data = json!({ "foo": { "bar": "baz" } });
    let ptr = Pointer::default();
    let expected = json!({ "foo": { "bar": "baz" } });
    assert_eq!(data.delete(&ptr), Ok(Some(expected)));
    assert!(data.is_null());
}

Feature Flags

Flag Enables
"std" implements std::error::Error for errors
"url" implements TryFrom<url::Url> for Pointer
"uniresid" implements TryFrom<uniresid::Uri> and TryFrom<uniresid::AbsoluteUri> for Pointer

Contributions / Issues

Contributions and feedback are always welcome and appreciated.

If you find an issue, please open a ticket or a pull request.

License

MIT or Apache 2.0.

About

JSON Pointer (RFC 6901) implementation for Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%