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