Avoid serializing into json::Value (#313)

This commit is contained in:
Arkadiy Paronyan
2018-07-14 15:54:48 +02:00
committed by Gav Wood
parent 58c84d49da
commit 0665cfa9fc
+12 -5
View File
@@ -114,6 +114,14 @@ impl ChainSpec {
/// Dump to json string.
pub fn to_json(self, raw: bool) -> Result<String, String> {
#[derive(Serialize, Deserialize)]
struct Container {
#[serde(flatten)]
spec: ChainSpecFile,
#[serde(flatten)]
genesis: Genesis,
};
let genesis = match (raw, self.genesis.resolve()?) {
(true, Genesis::Runtime(g)) => {
let storage = g.build_storage()?.into_iter()
@@ -124,11 +132,10 @@ impl ChainSpec {
},
(_, genesis) => genesis,
};
let mut spec = json::to_value(self.spec).map_err(|e| format!("Error generating spec json: {}", e))?;
{
let map = spec.as_object_mut().expect("spec is an object");
map.insert("genesis".to_owned(), json::to_value(genesis).map_err(|e| format!("Error generating genesis json: {}", e))?);
}
let spec = Container {
spec: self.spec,
genesis,
};
json::to_string_pretty(&spec).map_err(|e| format!("Error generating spec json: {}", e))
}