Browse Source

Show unexpected JSON response in case of error

refactor-mempool
Roman Zeyde 6 years ago
parent
commit
96d06eaeeb
No known key found for this signature in database GPG Key ID: 87CAE5FA46917CBB
  1. 27
      src/daemon.rs

27
src/daemon.rs

@ -52,16 +52,18 @@ fn tx_from_value(value: Value) -> Result<Transaction> {
} }
fn parse_jsonrpc_reply(reply: &mut Value, method: &str) -> Result<Value> { fn parse_jsonrpc_reply(reply: &mut Value, method: &str) -> Result<Value> {
let reply_obj = reply.as_object_mut().chain_err(|| "non-object reply")?; if let Some(reply_obj) = reply.as_object_mut() {
if let Some(err) = reply_obj.get("error") { if let Some(err) = reply_obj.get("error") {
if !err.is_null() { if !err.is_null() {
bail!("{} RPC error: {}", method, err); bail!("{} RPC error: {}", method, err);
}
}
if let Some(result) = reply_obj.get_mut("result") {
return Ok(result.take());
} }
bail!("no result in reply: {:?}", reply_obj);
} }
let result = reply_obj bail!("non-object reply: {:?}", reply);
.get_mut("result")
.chain_err(|| "no result in reply")?;
Ok(result.take())
} }
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
@ -275,10 +277,13 @@ impl Daemon {
let mut results = vec![]; let mut results = vec![];
let mut replies = self.call_jsonrpc(method, &reqs) let mut replies = self.call_jsonrpc(method, &reqs)
.chain_err(|| format!("RPC failed: {}", reqs))?; .chain_err(|| format!("RPC failed: {}", reqs))?;
for reply in replies.as_array_mut().chain_err(|| "non-array response")? { if let Some(replies_vec) = replies.as_array_mut() {
results.push(parse_jsonrpc_reply(reply, method)?) for reply in replies_vec {
results.push(parse_jsonrpc_reply(reply, method)?)
}
return Ok(results);
} }
Ok(results) bail!("non-array replies: {:?}", replies);
} }
// bitcoind JSONRPC API: // bitcoind JSONRPC API:

Loading…
Cancel
Save