use cmd::Error;
use hyper::client::IntoUrl;
use hyper::Url;
use jsonrpc_core::Params;
use reqwest::Client;
use serde_json::Value;
lazy_static! {
static ref CLIENT: Client = Client::new().expect("Expect to create an HTTP client");
}
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
pub enum ClientMethod {
EthGasPrice,
EthEstimateGas,
EthGetTxCount,
EthGetTxByHash,
EthSendRawTransaction,
EthGetBalance,
}
#[derive(Clone, Debug, PartialEq)]
pub struct MethodParams<'a>(pub ClientMethod, pub &'a Params);
pub struct RpcConnector {
pub url: Url,
}
impl RpcConnector {
pub fn new<U: IntoUrl>(url: U) -> Result<RpcConnector, Error> {
let url = url.into_url()?;
Ok(RpcConnector { url })
}
pub fn send_post(&self, params: &MethodParams) -> Result<Value, Error> {
let mut res = CLIENT.post(self.url.clone()).json(params).send()?;
let json: Value = res.json()?;
Ok(json["result"].clone())
}
}