Skip to content

Commit fee2c04

Browse files
authored
Merge pull request #880 from ljedrz/longer_rpc_error_responses
Longer RPC error responses
2 parents 1f36bf0 + 52d0974 commit fee2c04

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

rpc/src/custom_rpc_server.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,13 @@ async fn handle_rpc<S: Storage + Send + Sync + 'static>(
103103
let mut body = req.into_body();
104104
let data = match body.data().await {
105105
Some(Ok(data)) => data,
106-
_ => {
107-
let resp = jrt::Response::<(), ()>::error(
108-
jrt::Version::V2,
109-
jrt::Error::from_code(jrt::ErrorCode::ParseError),
110-
None,
111-
);
106+
err_or_none => {
107+
let mut error = jrt::Error::with_custom_msg(jrt::ErrorCode::ParseError, "Couldn't read the RPC body");
108+
if let Some(Err(err)) = err_or_none {
109+
error.data = Some(err.to_string());
110+
}
111+
112+
let resp = jrt::Response::<(), String>::error(jrt::Version::V2, error, None);
112113
let body = serde_json::to_vec(&resp).unwrap_or_default();
113114

114115
return Ok(hyper::Response::new(body.into()));
@@ -121,7 +122,7 @@ async fn handle_rpc<S: Storage + Send + Sync + 'static>(
121122
Err(_) => {
122123
let resp = jrt::Response::<(), ()>::error(
123124
jrt::Version::V2,
124-
jrt::Error::from_code(jrt::ErrorCode::ParseError),
125+
jrt::Error::with_custom_msg(jrt::ErrorCode::ParseError, "Couldn't parse the RPC body"),
125126
None,
126127
);
127128
let body = serde_json::to_vec(&resp).unwrap_or_default();
@@ -309,23 +310,21 @@ fn read_params(req: &jrt::Request<Params>) -> Result<Vec<serde_json::Value>, jrt
309310
}
310311

311312
/// Converts the crate's RpcError into a jrt::RpcError
312-
fn convert_crate_err(err: crate::error::RpcError) -> jrt::Error<()> {
313-
let mut err = err.to_string();
314-
err.truncate(31); // json-rpc-type Error length limit
315-
jrt::Error::with_custom_msg(jrt::ErrorCode::ServerError(0), &err)
313+
fn convert_crate_err(err: crate::error::RpcError) -> jrt::Error<String> {
314+
let error = jrt::Error::with_custom_msg(jrt::ErrorCode::ServerError(-32000), "internal error");
315+
error.set_data(err.to_string())
316316
}
317317

318318
/// Converts the jsonrpc-core's Error into a jrt::RpcError
319-
fn convert_core_err(err: jsonrpc_core::Error) -> jrt::Error<()> {
320-
let mut err = err.to_string();
321-
err.truncate(31); // json-rpc-type Error length limit
322-
jrt::Error::with_custom_msg(jrt::ErrorCode::InternalError, &err)
319+
fn convert_core_err(err: jsonrpc_core::Error) -> jrt::Error<String> {
320+
let error = jrt::Error::with_custom_msg(jrt::ErrorCode::InternalError, "JSONRPC server error");
321+
error.set_data(err.to_string())
323322
}
324323

325324
fn result_to_response<T: Serialize>(
326325
request: &jrt::Request<Params>,
327-
result: Result<T, jrt::Error<()>>,
328-
) -> jrt::Response<serde_json::Value, ()> {
326+
result: Result<T, jrt::Error<String>>,
327+
) -> jrt::Response<serde_json::Value, String> {
329328
match result {
330329
Ok(res) => {
331330
let result = serde_json::to_value(&res).unwrap_or_default();

0 commit comments

Comments
 (0)