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
use crateDecoder;
use crateIssues;
use cratePath;
/// A decoder built by `make` each time it decodes, so a decoder can refer to itself.
///
/// A recursive decoder names its own type, so it returns a [`BoxDecoder`](crate::BoxDecoder):
///
/// ```
/// use raoh::json::prelude::*;
/// use raoh::{lazy, BoxDecoder};
///
/// struct Category { name: String, children: Vec<Category> }
///
/// fn category() -> BoxDecoder<Value, Category> {
/// object((
/// field("name", string()),
/// field("children", lazy(category).list()),
/// ))
/// .map(|(name, children)| Category { name, children })
/// .boxed()
/// }
///
/// let tree = category()
/// .decode(&json!({"name": "a", "children": [{"name": "b", "children": []}]}))
/// .unwrap();
/// assert_eq!(tree.children[0].name, "b");
/// ```
/// The decoder [`lazy`] returns.
;