blob: 145f51de2ba57e88c61d91f562265ace37776317 [file] [log] [blame]
use serde_json::Value;
use object_builder;
use array_builder;
pub trait ArraySerializer {
fn build(&self, &mut array_builder::ArrayBuilder);
#[inline]
fn root(&self) -> Option<&str> {
None
}
#[inline]
fn meta(&self) -> Option<object_builder::ObjectBuilder> {
None
}
fn serialize(&mut self, include_root: bool) -> Value {
let mut bldr = array_builder::ArrayBuilder::new();
let root = self.root();
if include_root && root.is_some() {
bldr.root(root.unwrap())
}
self.build(&mut bldr);
match self.meta() {
Some(meta) => {
let mut meta_bldr = if bldr.has_root() {
object_builder::ObjectBuilder::from_json(bldr.unwrap()).unwrap()
} else {
let mut meta_bldr = object_builder::ObjectBuilder::new();
meta_bldr.set("data", bldr.unwrap());
meta_bldr
};
meta_bldr.set_json("meta", meta.unwrap());
meta_bldr.unwrap()
}
None => bldr.unwrap(),
}
}
}