@@ -12,71 +12,105 @@ Data structures and logic for resolving, assigning, and deleting by JSON Pointer
1212
1313JSON Pointers can be created either with a slice of strings or directly from a properly encoded string representing a JSON Pointer.
1414
15- ### Resolve
15+ ### Resolve values
16+
17+ #### ` Pointer::resolve `
18+
19+ ``` rust
20+ use jsonptr :: Pointer ;
21+ use serde_json :: json;
22+
23+ let mut data = json! ({" foo" : { " bar" : " baz" }});
24+ let ptr = Pointer :: new ([" foo" , " bar" ]);
25+ let bar = ptr . resolve (& data ). unwrap ();
26+ assert_eq! (bar , " baz" );
27+ ```
28+
29+ #### ` Resolve::resolve `
1630
1731``` rust
18- use jsonptr :: {Pointer , Resolve , ResolveMut };
32+ use jsonptr :: {Pointer , Resolve };
1933use serde_json :: json;
2034
21- fn main () {
22- let mut data = json! ({
23- " foo" : {
24- " bar" : " baz"
25- }
26- });
35+ let mut data = json! ({ " foo" : { " bar" : " baz" }});
36+ let ptr = Pointer :: new ([" foo" , " bar" ]);
37+ let bar = data . resolve (& ptr ). unwrap ();
38+ assert_eq! (bar , " baz" );
2739
28- let ptr = Pointer :: new (& [" foo" , " bar" ]);
29- let bar = ptr . resolve (& data ). unwrap ();
30- assert_eq! (bar , " baz" );
40+ ```
3141
32- let bar = data . resolve (& ptr ). unwrap ();
33- assert_eq! (bar , " baz" );
42+ #### ` ResolveMut::resolve_mut `
3443
35- let ptr = Pointer :: try_from (" /foo/bar" ). unwrap ();
36- let mut bar = data . resolve_mut (& ptr ). unwrap ();
37- assert_eq! (bar , " baz" );
38- }
44+ ``` rust
45+ use jsonptr :: {Pointer , ResolveMut };
46+ use serde_json :: json;
3947
48+ let ptr = Pointer :: try_from (" /foo/bar" ). unwrap ();
49+ let mut data = json! ({ " foo" : { " bar" : " baz" }});
50+ let mut bar = data . resolve_mut (& ptr ). unwrap ();
51+ assert_eq! (bar , " baz" );
4052```
4153
4254### Assign
4355
56+ #### ` Pointer::assign `
57+
58+ ``` rust
59+ use jsonptr :: Pointer ;
60+ use serde_json :: json;
61+
62+ let ptr = Pointer :: try_from (" /foo/bar" ). unwrap ();
63+ let mut data = json! ({});
64+ let _previous = ptr . assign (& mut data , " qux" ). unwrap ();
65+ assert_eq! (data , json! ({ " foo" : { " bar" : " qux" }}))
66+ ```
67+
68+ #### ` Assign::asign `
69+
4470``` rust
45- use jsonptr :: {Pointer , Assign };
71+ use jsonptr :: {Assign , Pointer };
4672use serde_json :: json;
4773
48- fn main () {
49- let ptr = Pointer :: try_from (" /foo/bar" ). unwrap ();
50- let mut data = json! ({});
51- let assignment = data . assign (& ptr , " qux" );
52- assert_eq! (data , json! ({ " foo" : { " bar" : " qux" }}))
53- }
74+ let ptr = Pointer :: try_from (" /foo/bar" ). unwrap ();
75+ let mut data = json! ({});
76+ let _previous = data . assign (& ptr , " qux" ). unwrap ();
77+ assert_eq! (data , json! ({ " foo" : { " bar" : " qux" }}))
5478```
5579
5680### Delete
5781
82+ #### ` Pointer::delete `
83+
84+ ``` rust
85+ use jsonptr :: Pointer ;
86+ use serde_json :: json;
87+
88+ let mut data = json! ({ " foo" : { " bar" : { " baz" : " qux" } } });
89+ let ptr = Pointer :: new (& [" foo" , " bar" , " baz" ]);
90+ assert_eq! (ptr . delete (& mut data ), Some (" qux" . into ()));
91+ assert_eq! (data , json! ({ " foo" : { " bar" : {} } }));
92+
93+ // unresolved pointers return None
94+ let mut data = json! ({});
95+ assert_eq! (ptr . delete (& mut data ), None );
96+ ```
97+
98+ #### ` Delete::delete `
99+
58100``` rust
59- use jsonptr :: {Pointer , Delete };
60- use serde_json :: json;
61- fn main () {
62- let mut data = json! ({ " foo" : { " bar" : { " baz" : " qux" } } });
63- let ptr = Pointer :: new (& [" foo" , " bar" , " baz" ]);
64- assert_eq! (data . delete (& ptr ), Ok (Some (" qux" . into ())));
65- assert_eq! (data , json! ({ " foo" : { " bar" : {} } }));
66-
67- // unresolved pointers return Ok(None)
68- let mut data = json! ({});
69- let ptr = Pointer :: new (& [" foo" , " bar" , " baz" ]);
70- assert_eq! (ptr . delete (& mut data ), Ok (None ));
71- assert_eq! (data , json! ({}));
72-
73- // replacing a root pointer replaces data with `Value::Null`
74- let mut data = json! ({ " foo" : { " bar" : " baz" } });
75- let ptr = Pointer :: default ();
76- let expected = json! ({ " foo" : { " bar" : " baz" } });
77- assert_eq! (data . delete (& ptr ), Ok (Some (expected )));
78- assert! (data . is_null ());
79- }
101+ use jsonptr :: {Pointer , Delete };
102+ use serde_json :: json;
103+
104+ let mut data = json! ({ " foo" : { " bar" : { " baz" : " qux" } } });
105+ let ptr = Pointer :: new ([" foo" , " bar" , " baz" ]);
106+ assert_eq! (ptr . delete (& mut data ), Some (" qux" . into ()));
107+ assert_eq! (data , json! ({ " foo" : { " bar" : {} } }));
108+
109+ // replacing a root pointer replaces data with `Value::Null`
110+ let ptr = Pointer :: default ();
111+ let deleted = json! ({ " foo" : { " bar" : {} } });
112+ assert_eq! (data . delete (& ptr ), Some (deleted ));
113+ assert! (data . is_null ());
80114```
81115
82116## Feature Flags
@@ -97,3 +131,7 @@ If you find an issue, please open a ticket or a pull request.
97131## License
98132
99133MIT or Apache 2.0.
134+
135+ ```
136+
137+ ```
0 commit comments