From 0665cfa9fc9139bb76f7e353cb7a13e035882fcc Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan <arkady.paronyan@gmail.com> Date: Sat, 14 Jul 2018 15:54:48 +0200 Subject: [PATCH] Avoid serializing into `json::Value` (#313) --- substrate/polkadot/service/src/chain_spec.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/substrate/polkadot/service/src/chain_spec.rs b/substrate/polkadot/service/src/chain_spec.rs index 6249fca7e4d..ccab794b050 100644 --- a/substrate/polkadot/service/src/chain_spec.rs +++ b/substrate/polkadot/service/src/chain_spec.rs @@ -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)) } -- GitLab