use serde::de::DeserializeOwned;
use serde_json::Value;
use crate::decode::read_u64;
use crate::error::Result;
use crate::rpc::Handler;
pub struct Api<H: Handler> {
pub handler: H,
}
impl<H: Handler> Api<H> {
pub fn new(handler: H) -> Api<H> {
Api { handler }
}
pub async fn call(&self, method: &str, params: Vec<Value>) -> Result<Value> {
self.handler.call(method, params).await
}
pub async fn to<T: DeserializeOwned>(&self, method: &str, params: Vec<Value>) -> Result<T> {
crate::decode::read_as(self.handler.call(method, params).await)
}
pub async fn block_number(&self) -> Result<u64> {
read_u64(self.handler.call("eth_blockNumber", vec![]).await)
}
pub async fn chain_id(&self) -> Result<u64> {
read_u64(self.handler.call("eth_chainId", vec![]).await)
}
}