clightningrpc_common/
errors.rs1use std::io;
18use std::{error, fmt};
19
20use serde::{Deserialize, Serialize};
21use serde_json;
22
23#[derive(Debug)]
25pub enum Error {
26 Json(serde_json::Error),
28 Io(io::Error),
30 Rpc(RpcError),
32 NoErrorOrResult,
34 NonceMismatch,
36 VersionMismatch,
38}
39
40impl From<serde_json::Error> for Error {
41 fn from(e: serde_json::Error) -> Error {
42 Error::Json(e)
43 }
44}
45
46impl From<io::Error> for Error {
47 fn from(e: io::Error) -> Error {
48 Error::Io(e)
49 }
50}
51
52impl From<RpcError> for Error {
53 fn from(e: RpcError) -> Error {
54 Error::Rpc(e)
55 }
56}
57
58impl fmt::Display for Error {
59 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
60 match *self {
61 Error::Json(ref e) => write!(f, "JSON decode error: {e}"),
62 Error::Io(ref e) => write!(f, "IO error response: {e}"),
63 Error::Rpc(ref r) => write!(f, "RPC error response: {r:?}"),
64 Error::NoErrorOrResult => write!(f, "Malformed RPC response"),
65 Error::NonceMismatch => write!(f, "Nonce of response did not match nonce of request"),
66 Error::VersionMismatch => write!(f, "`jsonrpc` field set to non-\"2.0\""),
67 }
68 }
69}
70
71impl error::Error for Error {
72 fn cause(&self) -> Option<&dyn error::Error> {
73 match *self {
74 Error::Json(ref e) => Some(e),
75 _ => None,
76 }
77 }
78}
79
80#[allow(clippy::derive_partial_eq_without_eq)]
81#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
82pub struct RpcError {
84 pub code: i32,
86 pub message: String,
88 pub data: Option<serde_json::Value>,
90}