use thiserror::Error;
#[derive(Debug, Error)]
#[error("remote error [{code}]: {message}")]
pub struct RpcRemoteError {
pub code: String,
pub message: String,
}
#[derive(Debug, Error)]
pub enum RpcTransportError {
#[error("http request failed: {0}")]
Http(String),
#[error("response body was not valid JSON: {0}")]
DecodeJson(String),
#[error("response envelope missing required field: {0}")]
DecodeEnvelope(&'static str),
#[error("response wire version {got:?} != expected {expected:?}")]
BadWireVersion { got: String, expected: &'static str },
#[error("peer returned HTTP {status} without a JSON envelope (body: {body:?})")]
BadStatus { status: u16, body: String },
}
#[derive(Debug, Error)]
pub enum RpcError {
#[error(transparent)]
Remote(#[from] RpcRemoteError),
#[error(transparent)]
Transport(#[from] RpcTransportError),
}