tomusdrw / rust-web3

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

Cannot compile v0.19.0 with Rust v1.77 on Mac #726

Open ababo opened 7 months ago

ababo commented 7 months ago

Here is the output I got:

    Checking web3 v0.19.0
error[E0308]: `match` arms have incompatible types
  --> /Users/ababo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/web3-0.19.0/src/api/accounts.rs:79:37
   |
77 | /                         match $o {
78 | |                             Some(value) => Ok(value),
   | |                                            --------- this is found to be of type `std::result::Result<U256, _>`
79 | |                             None => $f.await,
   | |                                     ^^^^^^^^ expected `Result<U256, _>`, found `U256`
80 | |                         }
   | |_________________________- `match` arms have incompatible types
...
95 |                   maybe!(gas_price, self.web3().eth().gas_price()),
   |                   ------------------------------------------------ in this macro invocation
   |
   = note: expected enum `std::result::Result<U256, _>`
            found struct `U256`
   = note: this error originates in the macro `maybe` (in Nightly builds, run with -Z macro-backtrace for more info)
help: try wrapping the expression in a variant of `std::result::Result`
   |
79 |                             None => Ok($f.await),
   |                                     +++        +
79 |                             None => Err($f.await),
   |                                     ++++        +

error[E0277]: the `?` operator can only be used in an async function that returns `Result` or `Option` (or another type that implements `FromResidual`)
  --> /Users/ababo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/web3-0.19.0/src/api/eth.rs:91:90
   |
90 |       pub async fn gas_price(&self) -> U256 {
   |  ___________________________________________-
91 | |         let price = CallFuture::new(self.transport.execute("eth_gasPrice", vec![])).await?;
   | |                                                                                          ^ cannot use the `?` operator in an async function that returns `U256`
92 | |         info!("price {}", price.to_string());
93 | |         Ok(price)
94 | |     }
   | |_____- this function should return `Result` or `Option` to accept `?`
   |
   = help: the trait `FromResidual<std::result::Result<Infallible, error::Error>>` is not implemented for `U256`

Some errors have detailed explanations: E0277, E0308.
For more information about an error, try `rustc --explain E0277`.
error: could not compile `web3` (lib) due to 2 previous errors
mohamed-said commented 4 months ago

Which macOS version are you running? Works fine with me on macOS 17 M1 🤔

ababo commented 4 months ago

Was the latest when published.