zilliqa-rs 0.3.2

A Rust SDK for Zilliqa blockchain
Documentation
use async_trait::async_trait;
use jsonrpsee::{
    core::{client::ClientT, traits::ToRpcParams},
    http_client::{HttpClient, HttpClientBuilder},
};
use serde::de::DeserializeOwned;
use url::Url;

use crate::Error;

use super::JsonRpcClient;

/// HTTP Provider
#[derive(Debug)]
pub struct Http {
    client: HttpClient,
}

impl Http {
    /// Creates a new HTTP provider.
    pub fn new(url: impl Into<Url>) -> Result<Self, Error> {
        Ok(Self {
            client: HttpClientBuilder::default().build(url.into())?,
        })
    }
}

#[async_trait]
impl JsonRpcClient for Http {
    async fn request<T: Send + Sync + ToRpcParams, R: DeserializeOwned>(&self, method: &str, params: T) -> Result<R, Error> {
        self.client.request(method, params).await.map_err(Error::JsonRpcError)
    }
}