Skip to content

Commit 858ae12

Browse files
committed
Refactor JSON-RPC response handling to use references for improved performance and memory efficiency
1 parent ac87b08 commit 858ae12

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

crates/rpc/src/server.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ impl JsonRpcVersion {
321321
}
322322
}
323323

324-
fn success_response(self, result: Value, id: &Value) -> Value {
324+
fn success_response(self, result: &Value, id: &Value) -> Value {
325325
match self {
326326
Self::Legacy => json!({"result": result, "error": null, "id": id}),
327327
Self::V2 => json!({"jsonrpc": "2.0", "result": result, "id": id}),
@@ -384,18 +384,22 @@ impl CallResponse {
384384
fn handle_json(handler: &Handler, body: &[u8]) -> JsonResponse {
385385
let body = match core::str::from_utf8(body) {
386386
Ok(body) => body,
387-
Err(error) => return legacy_error_response(RpcError::from(error), Value::new_null()),
387+
Err(error) => {
388+
return legacy_error_response(&RpcError::from(error), &Value::new_null());
389+
}
388390
};
389391
let request = match sonic_rs::from_str::<Value>(body) {
390392
Ok(request) => request,
391-
Err(error) => return legacy_error_response(RpcError::from(error), Value::new_null()),
393+
Err(error) => {
394+
return legacy_error_response(&RpcError::from(error), &Value::new_null());
395+
}
392396
};
393397

394398
if let Some(requests) = request.as_array() {
395399
if requests.is_empty() {
396400
return legacy_error_response(
397-
RpcError::InvalidRequest("batch must not be empty"),
398-
Value::new_null(),
401+
&RpcError::InvalidRequest("batch must not be empty"),
402+
&Value::new_null(),
399403
);
400404
}
401405
let mut responses = Vec::with_capacity(requests.len());
@@ -443,17 +447,17 @@ fn handle_single_json(handler: &Handler, request: &Value) -> CallResponse {
443447
return CallResponse::Notification;
444448
}
445449
match result {
446-
Ok(result) => CallResponse::reply(version.success_response(result, &id), version, false),
450+
Ok(result) => CallResponse::reply(version.success_response(&result, &id), version, false),
447451
Err(error) => CallResponse::reply(version.error_response(&error, &id), version, true),
448452
}
449453
}
450454

451-
fn legacy_error_response(error: RpcError, id: Value) -> JsonResponse {
455+
fn legacy_error_response(error: &RpcError, id: &Value) -> JsonResponse {
452456
let version = JsonRpcVersion::Legacy;
453457
JsonResponse {
454458
status: version.error_status(),
455459
reason: reason_for_status(version.error_status()),
456-
body: Some(version.error_response(&error, &id)),
460+
body: Some(version.error_response(error, id)),
457461
}
458462
}
459463

0 commit comments

Comments
 (0)