tomusdrw / rust-web3

Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library. ENS address: rust-web3.eth
MIT License
1.44k stars 468 forks source link

How to use reqwest client with tracing? #728

Open paymog opened 2 months ago

paymog commented 2 months ago

I'd like to add OTLP tracing to my outgoing web3 requests. I currently make

        let client = reqwest::Client::builder()
            .default_headers(headers)
            .build()
            .unwrap();

        Transport::RPC {
            client: http::Http::with_client(client, rpc),
            metrics,
            provider: provider.as_ref().into(),
        }

I'd like to instead use the ClientWithMiddleware object returned by this crate

        let client = ClientBuilder::new(
            reqwest::Client::builder()
                .default_headers(headers)
                .build()
                .unwrap(),
        )
        .with(TracingMiddleware::default())
        .build();

        Transport::RPC {
            client: http::Http::with_client(client, rpc),
            metrics,
            provider: provider.as_ref().into(),
        }

but Http::with_client will only accept an object of type Client and not ClientWithMiddleware. Is there a way to get around this considering that ClientWithMiddleware should expose the exact same API?