1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use crate::prelude::rings_core::prelude::web3;
use anyhow::{anyhow, Result};

pub type Transport = web3::transports::Either<web3::transports::WebSocket, web3::transports::Http>;

pub async fn link_web3(endpoint: &str) -> Result<web3::Web3<Transport>> {
    if endpoint.starts_with("ws") {
        let transport = web3::transports::WebSocket::new(endpoint).await?;
        Ok(web3::Web3::new(web3::transports::Either::Left(transport)))
    } else if endpoint.starts_with("http") {
        let transport = web3::transports::Http::new(endpoint)?;
        Ok(web3::Web3::new(web3::transports::Either::Right(transport)))
    } else {
        Err(anyhow!("Failed to parse eth_endpoint {:?}", endpoint))
    }
}