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}