jsonway/
array_serializer.rs

1use serde_json::Value;
2
3use object_builder;
4use array_builder;
5
6pub trait ArraySerializer {
7    fn build(&self, &mut array_builder::ArrayBuilder);
8
9    #[inline]
10    fn root(&self) -> Option<&str> {
11        None
12    }
13
14    #[inline]
15    fn meta(&self) -> Option<object_builder::ObjectBuilder> {
16        None
17    }
18
19    fn serialize(&mut self, include_root: bool) -> Value {
20        let mut bldr = array_builder::ArrayBuilder::new();
21
22        let root = self.root();
23        if include_root && root.is_some() {
24            bldr.root(root.unwrap())
25        }
26
27        self.build(&mut bldr);
28
29        match self.meta() {
30            Some(meta) => {
31                let mut meta_bldr = if bldr.has_root() {
32                    object_builder::ObjectBuilder::from_json(bldr.unwrap()).unwrap()
33                } else {
34                    let mut meta_bldr = object_builder::ObjectBuilder::new();
35                    meta_bldr.set("data", bldr.unwrap());
36                    meta_bldr
37                };
38                meta_bldr.set_json("meta", meta.unwrap());
39                meta_bldr.unwrap()
40            }
41            None => bldr.unwrap(),
42        }
43    }
44}