diff --git a/pubsub-client/src/nonblocking/pubsub_client.rs b/pubsub-client/src/nonblocking/pubsub_client.rs index 62251c8eca..fe0540ebed 100644 --- a/pubsub-client/src/nonblocking/pubsub_client.rs +++ b/pubsub-client/src/nonblocking/pubsub_client.rs @@ -240,6 +240,12 @@ pub enum PubsubClientError { #[error("request error: {0}")] RequestError(String), + + #[error("could not find subscription id: {0}")] + UnexpectedSubscriptionResponse(String), + + #[error("could not find node version: {0}")] + UnexpectedGetVersionResponse(String), } type UnsubscribeFn = Box BoxFuture<'static, ()> + Send>; diff --git a/pubsub-client/src/pubsub_client.rs b/pubsub-client/src/pubsub_client.rs index 5856f107c8..281c0aa776 100644 --- a/pubsub-client/src/pubsub_client.rs +++ b/pubsub-client/src/pubsub_client.rs @@ -182,9 +182,9 @@ where } } } - // TODO: Add proper JSON RPC response/error handling... - Err(PubsubClientError::UnexpectedMessageError(format!( - "msg={message_text:?}" + + Err(PubsubClientError::UnexpectedSubscriptionResponse(format!( + "msg={message_text}" ))) } @@ -228,21 +228,17 @@ where if let Ok(json_msg) = serde_json::from_str::>(message_text) { if let Some(Object(version_map)) = json_msg.get("result") { if let Some(node_version) = version_map.get("solana-core") { - let node_version = semver::Version::parse( - node_version.as_str().unwrap_or_default(), - ) - .map_err(|e| { - PubsubClientError::RequestError(format!( - "failed to parse cluster version: {e}" - )) - })?; - return Ok(node_version); + if let Some(node_version) = node_version.as_str() { + if let Ok(parsed) = semver::Version::parse(node_version) { + return Ok(parsed); + } + } } } } - // TODO: Add proper JSON RPC response/error handling... - Err(PubsubClientError::UnexpectedMessageError(format!( - "msg={message_text:?}" + + Err(PubsubClientError::UnexpectedGetVersionResponse(format!( + "msg={message_text}" ))) } @@ -253,19 +249,19 @@ where if message.is_ping() { return Ok(None); } - let message_text = &message.into_text().unwrap(); + let message_text = &message.into_text()?; if let Ok(json_msg) = serde_json::from_str::>(message_text) { if let Some(Object(params)) = json_msg.get("params") { if let Some(result) = params.get("result") { - let x: T = serde_json::from_value::(result.clone()).unwrap(); - return Ok(Some(x)); + if let Ok(x) = serde_json::from_value::(result.clone()) { + return Ok(Some(x)); + } } } } - // TODO: Add proper JSON RPC response/error handling... Err(PubsubClientError::UnexpectedMessageError(format!( - "msg={message_text:?}" + "msg={message_text}" ))) }