From 91aa40e749620f31bf7db01c772e672f023136b5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 6 Jul 2024 10:25:56 -0700 Subject: [PATCH 1/2] Add ui test of unsatisfied serde trait bound --- test_suite/tests/ui/on_unimplemented.rs | 23 ++++++++++ test_suite/tests/ui/on_unimplemented.stderr | 51 +++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 test_suite/tests/ui/on_unimplemented.rs create mode 100644 test_suite/tests/ui/on_unimplemented.stderr diff --git a/test_suite/tests/ui/on_unimplemented.rs b/test_suite/tests/ui/on_unimplemented.rs new file mode 100644 index 000000000..fab56751b --- /dev/null +++ b/test_suite/tests/ui/on_unimplemented.rs @@ -0,0 +1,23 @@ +use serde::de::Deserialize; +use serde::ser::Serialize; + +fn to_string(_: &T) -> String +where + T: Serialize, +{ + unimplemented!() +} + +fn from_str<'de, T>(_: &'de str) -> T +where + T: Deserialize<'de>, +{ + unimplemented!() +} + +struct MyStruct; + +fn main() { + to_string(&MyStruct); + let _: MyStruct = from_str(""); +} diff --git a/test_suite/tests/ui/on_unimplemented.stderr b/test_suite/tests/ui/on_unimplemented.stderr new file mode 100644 index 000000000..3575f4a60 --- /dev/null +++ b/test_suite/tests/ui/on_unimplemented.stderr @@ -0,0 +1,51 @@ +error[E0277]: the trait bound `MyStruct: Serialize` is not satisfied + --> tests/ui/on_unimplemented.rs:21:15 + | +21 | to_string(&MyStruct); + | --------- ^^^^^^^^^ the trait `Serialize` is not implemented for `MyStruct` + | | + | required by a bound introduced by this call + | + = help: the following other types implement trait `Serialize`: + &'a T + &'a mut T + () + (T,) + (T0, T1) + (T0, T1, T2) + (T0, T1, T2, T3) + (T0, T1, T2, T3, T4) + and $N others +note: required by a bound in `to_string` + --> tests/ui/on_unimplemented.rs:6:8 + | +4 | fn to_string(_: &T) -> String + | --------- required by a bound in this function +5 | where +6 | T: Serialize, + | ^^^^^^^^^ required by this bound in `to_string` + +error[E0277]: the trait bound `MyStruct: Deserialize<'_>` is not satisfied + --> tests/ui/on_unimplemented.rs:22:23 + | +22 | let _: MyStruct = from_str(""); + | ^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `MyStruct` + | + = help: the following other types implement trait `Deserialize<'de>`: + &'a Path + &'a [u8] + &'a str + () + (T,) + (T0, T1) + (T0, T1, T2) + (T0, T1, T2, T3) + and $N others +note: required by a bound in `from_str` + --> tests/ui/on_unimplemented.rs:13:8 + | +11 | fn from_str<'de, T>(_: &'de str) -> T + | -------- required by a bound in this function +12 | where +13 | T: Deserialize<'de>, + | ^^^^^^^^^^^^^^^^ required by this bound in `from_str` From 1179158defc5351467cbd2c340b7e1498391bce4 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 6 Jul 2024 13:17:21 -0700 Subject: [PATCH 2/2] Update ui test with diagnostic::on_unimplemented from PR 2767 --- test_suite/tests/ui/on_unimplemented.stderr | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test_suite/tests/ui/on_unimplemented.stderr b/test_suite/tests/ui/on_unimplemented.stderr index 3575f4a60..1b0318190 100644 --- a/test_suite/tests/ui/on_unimplemented.stderr +++ b/test_suite/tests/ui/on_unimplemented.stderr @@ -6,6 +6,8 @@ error[E0277]: the trait bound `MyStruct: Serialize` is not satisfied | | | required by a bound introduced by this call | + = note: for local types consider adding `#[derive(serde::Serialize)]` to your `MyStruct` type + = note: for types from other crates check whether the crate offers a `serde` feature flag = help: the following other types implement trait `Serialize`: &'a T &'a mut T @@ -31,6 +33,8 @@ error[E0277]: the trait bound `MyStruct: Deserialize<'_>` is not satisfied 22 | let _: MyStruct = from_str(""); | ^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `MyStruct` | + = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `MyStruct` type + = note: for types from other crates check whether the crate offers a `serde` feature flag = help: the following other types implement trait `Deserialize<'de>`: &'a Path &'a [u8]