use crate::error::{Error, RpcError};
use serde_derive::Deserialize;
use serde_derive::Serialize;
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct RpcRequest {
pub method: String,
pub params: Vec<serde_json::Value>,
pub id: serde_json::Value,
pub jsonrpc: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct RpcResponse {
pub result: Option<serde_json::Value>,
pub error: Option<RpcError>,
pub id: serde_json::Value,
pub jsonrpc: Option<String>,
}
impl RpcResponse {
pub fn into_result<T: serde::de::DeserializeOwned>(self) -> Result<T, Error> {
if let Some(e) = self.error {
return Err(Error::Rpc(e));
}
serde_json::from_value(self.result.unwrap_or(serde_json::Value::Null)).map_err(Error::Json)
}
}