-
Notifications
You must be signed in to change notification settings - Fork 13.8k
compiler: Hint at multiple crate versions if trait impl is for wrong ADT #146874
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Enselic
wants to merge
2
commits into
rust-lang:master
Choose a base branch
from
Enselic:multiple-adt-versions
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+168
−6
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I haven't compared the two PRs but CC open PR #144674 which also touches this function. |
Zalathar
added a commit
to Zalathar/rust
that referenced
this pull request
Sep 23, 2025
tests/run-make/crate-loading: Rename source files for clarity For rust-lang#146874 I originally tried to extend the existing test **tests/run-make/crate-loading**. That didn't work out since adding a re-export of the entire crate significantly changes the emitted error messsage. I did put some effort into making that test easier to understand however, by renaming its files. (Since I was confused myself at first.) Let's save some time for future devs by doing just the renames. Further cleanups are possible, but that will change the blessed output, so let's not do that right now. r? `@jieyouxu` since you have the context of rust-lang#146874
Kobzol
added a commit
to Kobzol/rust
that referenced
this pull request
Sep 23, 2025
tests/run-make/crate-loading: Rename source files for clarity For rust-lang#146874 I originally tried to extend the existing test **tests/run-make/crate-loading**. That didn't work out since adding a re-export of the entire crate significantly changes the emitted error messsage. I did put some effort into making that test easier to understand however, by renaming its files. (Since I was confused myself at first.) Let's save some time for future devs by doing just the renames. Further cleanups are possible, but that will change the blessed output, so let's not do that right now. r? ``@jieyouxu`` since you have the context of rust-lang#146874
matthiaskrgr
added a commit
to matthiaskrgr/rust
that referenced
this pull request
Sep 23, 2025
tests/run-make/crate-loading: Rename source files for clarity For rust-lang#146874 I originally tried to extend the existing test **tests/run-make/crate-loading**. That didn't work out since adding a re-export of the entire crate significantly changes the emitted error messsage. I did put some effort into making that test easier to understand however, by renaming its files. (Since I was confused myself at first.) Let's save some time for future devs by doing just the renames. Further cleanups are possible, but that will change the blessed output, so let's not do that right now. r? ```@jieyouxu``` since you have the context of rust-lang#146874
rust-timer
added a commit
that referenced
this pull request
Sep 23, 2025
Rollup merge of #146875 - Enselic:better-file-names, r=jieyouxu tests/run-make/crate-loading: Rename source files for clarity For #146874 I originally tried to extend the existing test **tests/run-make/crate-loading**. That didn't work out since adding a re-export of the entire crate significantly changes the emitted error messsage. I did put some effort into making that test easier to understand however, by renaming its files. (Since I was confused myself at first.) Let's save some time for future devs by doing just the renames. Further cleanups are possible, but that will change the blessed output, so let's not do that right now. r? ```@jieyouxu``` since you have the context of #146874
Muscraft
pushed a commit
to Muscraft/rust
that referenced
this pull request
Sep 24, 2025
tests/run-make/crate-loading: Rename source files for clarity For rust-lang#146874 I originally tried to extend the existing test **tests/run-make/crate-loading**. That didn't work out since adding a re-export of the entire crate significantly changes the emitted error messsage. I did put some effort into making that test easier to understand however, by renaming its files. (Since I was confused myself at first.) Let's save some time for future devs by doing just the renames. Further cleanups are possible, but that will change the blessed output, so let's not do that right now. r? ```@jieyouxu``` since you have the context of rust-lang#146874
jieyouxu
approved these changes
Oct 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bors r+ |
Zalathar
added a commit
to Zalathar/rust
that referenced
this pull request
Oct 4, 2025
…ieyouxu compiler: Hint at multiple crate versions if trait impl is for wrong ADT If a user does e.g. impl From<Bar> for foo::Foo and get a compilation error about that `From<Bar>` is not implemented for `Foo`, check if multiple versions of the crate with `Foo` is present in the dependency graph. If so, give a hint about it. Note that a test is added as a separate commit so it is easy to see what effect the fix has on the emitted error message. This can be seen as a continuation of rust-lang#124944. I think this closes RUST-71693 but I haven't checked since it lacks a minimal reproducer. If this gets merged I'll ask that reporter if this fix works for them. ## Real world example I encountered this case in the wild and didn't realize I had multiple versions of a crate in my dependency graph. So I was a bit confused at first. For reference, here is what that looked like. <details> <summary>Click to expand</summary> ### Before fix ``` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` ### After fix ``` Compiling auto-merge-dependabot-pull-requests-webhook v0.1.0 (/home/martin/src/auto-merge-dependabot-prs/rust-webhook) error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` </details>
bors
added a commit
that referenced
this pull request
Oct 4, 2025
Rollup of 14 pull requests Successful merges: - #142670 (Document fully-qualified syntax in `as`' keyword doc) - #145685 (add CloneFromCell and Cell::get_cloned) - #146330 (Bump unicode_data and printables to version 17.0.0) - #146451 (Fix atan2 inaccuracy in documentation) - #146479 (add mem::conjure_zst) - #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT ) - #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos) - #147190 (std: `sys::net` cleanups) - #147251 (Do not assert that a change in global cache only happens when concurrent) - #147280 (Return to needs-llvm-components being info-only) - #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting) - #147309 (Add documentation about unwinding to wasm targets) - #147315 (bless autodiff batching test) - #147323 (Fix top level ui tests check in tidy) r? `@ghost` `@rustbot` modify labels: rollup
jieyouxu
reviewed
Oct 4, 2025
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
@bors2 delegate=try |
✌️ @Enselic, you can now perform try builds on this pull request! You can now post |
If a user does e.g. impl From<Bar> for foo::Foo and get a compilation error about that `From<Bar>` is not implemented for `Foo`, check if multiple versions of the crate with `Foo` is present in the dependency graph. If so, give a hint about it. I encountered this case in the wild and didn't realize I had multiple versions of a crate in my dependency graph. So I was a bit confused at first. This fix will make life easier for others.
141cada
to
f6d5d3e
Compare
This comment has been minimized.
This comment has been minimized.
This comment was marked as outdated.
This comment was marked as outdated.
@bors2 try |
This comment has been minimized.
This comment has been minimized.
rust-bors bot
added a commit
that referenced
this pull request
Oct 4, 2025
compiler: Hint at multiple crate versions if trait impl is for wrong ADT try-job: dist-various-1
@bors r+ |
Zalathar
added a commit
to Zalathar/rust
that referenced
this pull request
Oct 5, 2025
…ieyouxu compiler: Hint at multiple crate versions if trait impl is for wrong ADT If a user does e.g. impl From<Bar> for foo::Foo and get a compilation error about that `From<Bar>` is not implemented for `Foo`, check if multiple versions of the crate with `Foo` is present in the dependency graph. If so, give a hint about it. Note that a test is added as a separate commit so it is easy to see what effect the fix has on the emitted error message. This can be seen as a continuation of rust-lang#124944. I think this closes RUST-71693 but I haven't checked since it lacks a minimal reproducer. If this gets merged I'll ask that reporter if this fix works for them. ## Real world example I encountered this case in the wild and didn't realize I had multiple versions of a crate in my dependency graph. So I was a bit confused at first. For reference, here is what that looked like. <details> <summary>Click to expand</summary> ### Before fix ``` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` ### After fix ``` Compiling auto-merge-dependabot-pull-requests-webhook v0.1.0 (/home/martin/src/auto-merge-dependabot-prs/rust-webhook) error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` </details> try-job: dist-various-1
bors
added a commit
that referenced
this pull request
Oct 5, 2025
compiler: Hint at multiple crate versions if trait impl is for wrong ADT If a user does e.g. impl From<Bar> for foo::Foo and get a compilation error about that `From<Bar>` is not implemented for `Foo`, check if multiple versions of the crate with `Foo` is present in the dependency graph. If so, give a hint about it. Note that a test is added as a separate commit so it is easy to see what effect the fix has on the emitted error message. This can be seen as a continuation of #124944. I think this closes RUST-71693 but I haven't checked since it lacks a minimal reproducer. If this gets merged I'll ask that reporter if this fix works for them. ## Real world example I encountered this case in the wild and didn't realize I had multiple versions of a crate in my dependency graph. So I was a bit confused at first. For reference, here is what that looked like. <details> <summary>Click to expand</summary> ### Before fix ``` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` ### After fix ``` Compiling auto-merge-dependabot-pull-requests-webhook v0.1.0 (/home/martin/src/auto-merge-dependabot-prs/rust-webhook) error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:5 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` error[E0277]: the trait bound `lambda_http::lambda_runtime::Diagnostic: From<Error>` is not satisfied --> src/main.rs:73:48 | 73 | lambda_http::run(service_fn(handle_event)).await | ^^^^^ the trait `From<Error>` is not implemented for `lambda_http::lambda_runtime::Diagnostic` | help: item with same name found --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_runtime-0.13.0/src/diagnostic.rs:43:1 | 43 | pub struct Diagnostic { | ^^^^^^^^^^^^^^^^^^^^^ = note: perhaps two different versions of crate `lambda_runtime` are being used? = help: the following other types implement trait `From<T>`: `lambda_http::lambda_runtime::Diagnostic` implements `From<&str>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError + Send + Sync>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Box<dyn StdError>>` `lambda_http::lambda_runtime::Diagnostic` implements `From<Infallible>` `lambda_http::lambda_runtime::Diagnostic` implements `From<lambda_runtime::deserializer::DeserializeError>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::io::Error>` `lambda_http::lambda_runtime::Diagnostic` implements `From<std::string::String>` = note: required for `Error` to implement `Into<lambda_http::lambda_runtime::Diagnostic>` note: required by a bound in `lambda_http::run` --> /home/martin/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/lambda_http-0.17.0/src/lib.rs:199:26 | 194 | pub async fn run<'a, R, S, E>(handler: S) -> Result<(), Error> | --- required by a bound in this function ... 199 | E: std::fmt::Debug + Into<Diagnostic>, | ^^^^^^^^^^^^^^^^ required by this bound in `run` For more information about this error, try `rustc --explain E0277`. error: could not compile `auto-merge-dependabot-pull-requests-webhook` (bin "auto-merge-dependabot-pull-requests-webhook") due to 2 previous errors ``` </details> try-job: dist-various-1
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-run-make
Area: port run-make Makefiles to rmake.rs
S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If a user does e.g.
and get a compilation error about that
From<Bar>
is not implemented forFoo
, check if multiple versions of the crate withFoo
is present in the dependency graph. If so, give a hint about it.Note that a test is added as a separate commit so it is easy to see what effect the fix has on the emitted error message.
This can be seen as a continuation of #124944.
I think this closes RUST-71693 but I haven't checked since it lacks a minimal reproducer. If this gets merged I'll ask that reporter if this fix works for them.
Real world example
I encountered this case in the wild and didn't realize I had multiple versions of a crate in my dependency graph. So I was a bit confused at first. For reference, here is what that looked like.
Click to expand
Before fix
After fix
try-job: dist-various-1