jsonptr/
delete.rs

1use serde_json::Value;
2
3use crate::{MalformedPointerError, Pointer};
4/// Delete is implemented by types which can internally remove a value based on
5/// a JSON Pointer
6pub trait Delete {
7    /// Error associated with `Delete`
8    type Error;
9    /// Attempts to internally delete a value based upon a [Pointer].
10    fn delete(&mut self, ptr: &Pointer) -> Option<Value>;
11}
12
13impl Delete for Value {
14    type Error = MalformedPointerError;
15    fn delete(&mut self, ptr: &Pointer) -> Option<Value> {
16        ptr.delete(self)
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use serde_json::json;
23
24    use super::*;
25
26    #[test]
27    fn test_issue_18() {
28        let mut data = json!(
29            {
30                "Example": 21,
31                "test": "test"
32              }
33        );
34        let pointer = Pointer::new(["Example"]);
35        println!("{}", pointer);
36        pointer.delete(&mut data);
37        assert_eq!(json!({"test": "test"}), data);
38    }
39}