From 5064133f1f59be9539ff6a2ebd830132b2379564 Mon Sep 17 00:00:00 2001 From: hozan23 Date: Sat, 15 Jun 2024 00:02:19 +0200 Subject: jsonrpc: separate the RPC errors from the library implementation errors --- jsonrpc/src/error.rs | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'jsonrpc/src/error.rs') diff --git a/jsonrpc/src/error.rs b/jsonrpc/src/error.rs index 3994bcf..89d0e2f 100644 --- a/jsonrpc/src/error.rs +++ b/jsonrpc/src/error.rs @@ -14,21 +14,12 @@ pub enum Error { #[error("Subscribe Error: code: {0} msg: {1}")] SubscribeError(i32, String), - #[error("RPC Method Error: code: {0} msg: {1}")] - RPCMethodError(i32, &'static str), - - #[error("Invalid Params: {0}")] - InvalidParams(&'static str), - - #[error("Invalid Request: {0}")] - InvalidRequest(&'static str), + #[error("Invalid Message Error: {0}")] + InvalidMsg(&'static str), #[error(transparent)] ParseJSON(#[from] serde_json::Error), - #[error("Invalid Message Error: {0}")] - InvalidMsg(&'static str), - #[error("Unsupported protocol: {0}")] UnsupportedProtocol(String), @@ -42,7 +33,7 @@ pub enum Error { ChannelRecv(#[from] async_channel::RecvError), #[error("Channel send Error: {0}")] - ChannelSend(String), + ChannelSend(&'static str), #[error("Unexpected Error: {0}")] General(&'static str), @@ -56,6 +47,33 @@ pub enum Error { impl From> for Error { fn from(error: async_channel::SendError) -> Self { - Error::ChannelSend(error.to_string()) + Error::ChannelSend(error.to_string().leak()) + } +} + +pub type RPCResult = std::result::Result; + +/// Represents RPC Error. +#[derive(ThisError, Debug)] +pub enum RPCError { + #[error("Custom Error: code: {0} msg: {1}")] + CustomError(i32, &'static str), + + #[error("Invalid Params: {0}")] + InvalidParams(&'static str), + + #[error("Invalid Request: {0}")] + InvalidRequest(&'static str), + + #[error("Parse Error: {0}")] + ParseError(&'static str), + + #[error("Internal Error")] + InternalError, +} + +impl From for RPCError { + fn from(error: serde_json::Error) -> Self { + RPCError::ParseError(error.to_string().leak()) } } -- cgit v1.2.3