2020-05-26 09:52:15 +00:00
|
|
|
//! Ethereum compatible providers
|
|
|
|
//! Currently supported:
|
|
|
|
//! - Raw HTTP POST requests
|
|
|
|
//!
|
|
|
|
//! TODO: WebSockets, multiple backends, popular APIs etc.
|
|
|
|
|
|
|
|
mod provider;
|
|
|
|
mod http;
|
|
|
|
|
|
|
|
use async_trait::async_trait;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use std::{error::Error, fmt::Debug};
|
|
|
|
|
|
|
|
/// An HTTP provider for interacting with an Ethereum-compatible blockchain
|
|
|
|
pub type HttpProvider = Provider<http::Provider>;
|
|
|
|
|
|
|
|
#[async_trait]
|
|
|
|
/// Implement this trait in order to plug in different backends
|
|
|
|
pub trait JsonRpcClient: Debug {
|
|
|
|
type Error: Error;
|
|
|
|
|
|
|
|
/// Sends a request with the provided method and the params serialized as JSON
|
|
|
|
async fn request<T: Serialize + Send + Sync, R: for<'a> Deserialize<'a>>(
|
|
|
|
&self,
|
|
|
|
method: &str,
|
|
|
|
params: Option<T>,
|
|
|
|
) -> Result<R, Self::Error>;
|
2020-05-26 09:37:31 +00:00
|
|
|
}
|
2020-05-26 09:52:15 +00:00
|
|
|
|