Accept RPC responses with a null result

This is actually a valid response in some cases, at least for the
`gettxout` command, where `null` is returned if no corresponding
UTXO was found, but the command otherwise succeeded.
This commit is contained in:
Matt Corallo 2023-04-29 22:31:24 +00:00
parent 685f266655
commit 8164cb9307

View file

@ -105,12 +105,13 @@ impl RpcClient {
return Err(std::io::Error::new(std::io::ErrorKind::Other, rpc_error));
}
let result = &mut response["result"];
if result.is_null() {
return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "expected JSON result"));
}
let result = match response.get_mut("result") {
Some(result) => result.take(),
None =>
return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "expected JSON result")),
};
JsonResponse(result.take()).try_into()
JsonResponse(result).try_into()
}
}
@ -205,7 +206,7 @@ mod tests {
#[tokio::test]
async fn call_method_returning_missing_result() {
let response = serde_json::json!({ "result": null });
let response = serde_json::json!({ });
let server = HttpServer::responding_with_ok(MessageBody::Content(response));
let client = RpcClient::new(CREDENTIALS, server.endpoint()).unwrap();