1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use FastStr;
/// Represents a json pointer path. It can be created by [`pointer!`] macro.
pub type JsonPointer = ;
/// Represents a node in a json pointer path.
/// Represents a json pointer path.
///
/// Used to indexing a [`Value`][`crate::Value`], [`LazyValue`][`crate::LazyValue`],
/// [`get`][`crate::get`] or [`get_unchecked`][`crate::get_unchecked`].
///
/// The path can includes both keys or indexes.
/// - keys: string-like, used to indexing an object.
/// - indexes: usize-like, used to indexing an array.
///
/// # Examples
///
/// ```
/// # use sonic_rs::pointer;
/// use sonic_rs::JsonValueTrait;
///
/// let value: sonic_rs::Value = sonic_rs::from_str(
/// r#"{
/// "foo": [
/// 0,
/// 1,
/// {
/// "bar": 123
/// }
/// ]
/// }"#,
/// )
/// .unwrap();
/// let path = pointer!["foo", 2, "bar"];
///
/// let got = value.pointer(&path).unwrap();
///
/// assert_eq!(got, 123);
/// ```