use crate::generated_exceptions::errorCode;
use crate::result::{Error, Result};
use serde::{Deserialize, Serialize};
#[derive(Serialize)]
pub struct RpcRequest<T> {
jsonrpc: String,
method: String,
params: T,
id: String,
}
impl<T> RpcRequest<T> {
pub fn new(method: String, params: T) -> Self {
let r: u128 = rand::random();
RpcRequest::<T> {
jsonrpc: "2.0".to_owned(),
method,
params,
id: format!("{:x}", r),
}
}
}
#[derive(Debug, Deserialize)]
pub struct RpcError {
code: i32, message: errorCode,
}
#[derive(Deserialize)]
pub struct RpcResponse<T> {
jsonrpc: String,
result: Option<T>,
error: Option<RpcError>,
id: String,
}
impl<T> RpcResponse<T> {
pub fn into_inner(self) -> Result<T> {
let _ = self.jsonrpc; let _ = self.id; match (self.error, self.result) {
(Some(rpc_error), _) => {
Err(Error::APINGException(rpc_error.message))
}
(None, Some(result)) => Ok(result),
(None, None) => Err(Error::JSONRPCError),
}
}
}