16 unstable releases (3 breaking)
new 0.3.3 | Mar 18, 2023 |
---|---|
0.3.2 |
|
0.2.0 | Feb 24, 2023 |
0.1.5 | Jun 30, 2022 |
0.0.8 | Jun 12, 2022 |
#208 in Data structures
585 downloads per month
84KB
2K
SLoC
jsonptr - JSON Pointers for Rust
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.
Dependencies
~0.4–1.1MB
~29K SLoC