Add tests that ensures that error reported for a path for with and default attributes

This commit is contained in:
Mingun
2023-07-22 22:33:09 +05:00
committed by Mingun
parent 21c7fd1bd5
commit 291ec50d98
16 changed files with 497 additions and 0 deletions
@@ -0,0 +1,23 @@
use serde_derive::{Deserialize, Serialize};
mod w {
use serde::{Deserializer, Serializer};
pub fn deserialize<'de, D: Deserializer<'de>>(_: D) -> Result<(), D::Error> {
unimplemented!()
}
pub fn serialize<T, S: Serializer>(_: S) -> Result<S::Ok, S::Error> {
unimplemented!()
}
}
#[derive(Serialize, Deserialize)]
struct W(#[serde(with = "w")] u8, u8);
#[derive(Serialize, Deserialize)]
struct S(#[serde(serialize_with = "w::serialize")] u8, u8);
#[derive(Serialize, Deserialize)]
struct D(#[serde(deserialize_with = "w::deserialize")] u8, u8);
fn main() {}
@@ -0,0 +1,97 @@
error[E0277]: the trait bound `&u8: Serializer` is not satisfied
--> tests/ui/with/incorrect_type.rs:14:10
|
14 | #[derive(Serialize, Deserialize)]
| ^^^^^^^^^ the trait `Serializer` is not implemented for `&u8`
15 | struct W(#[serde(with = "w")] u8, u8);
| --- required by a bound introduced by this call
|
= help: the following other types implement trait `Serializer`:
&'a mut Formatter<'b>
FlatMapSerializer<'a, M>
_::_serde::__private::ser::content::ContentSerializer<E>
note: required by a bound in `w::serialize`
--> tests/ui/with/incorrect_type.rs:9:28
|
9 | pub fn serialize<T, S: Serializer>(_: S) -> Result<S::Ok, S::Error> {
| ^^^^^^^^^^ required by this bound in `serialize`
error[E0061]: this function takes 1 argument but 2 arguments were supplied
--> tests/ui/with/incorrect_type.rs:15:25
|
15 | struct W(#[serde(with = "w")] u8, u8);
| ^^^ unexpected argument #2 of type `__S`
|
note: function defined here
--> tests/ui/with/incorrect_type.rs:9:12
|
9 | pub fn serialize<T, S: Serializer>(_: S) -> Result<S::Ok, S::Error> {
| ^^^^^^^^^ ----
error[E0277]: the trait bound `&u8: Serializer` is not satisfied
--> tests/ui/with/incorrect_type.rs:15:25
|
15 | struct W(#[serde(with = "w")] u8, u8);
| ^^^ the trait `Serializer` is not implemented for `&u8`
|
= help: the following other types implement trait `Serializer`:
&'a mut Formatter<'b>
FlatMapSerializer<'a, M>
_::_serde::__private::ser::content::ContentSerializer<E>
error[E0308]: `?` operator has incompatible types
--> tests/ui/with/incorrect_type.rs:15:25
|
15 | struct W(#[serde(with = "w")] u8, u8);
| ^^^ expected `u8`, found `()`
|
= note: `?` operator cannot convert from `()` to `u8`
error[E0277]: the trait bound `&u8: Serializer` is not satisfied
--> tests/ui/with/incorrect_type.rs:17:10
|
17 | #[derive(Serialize, Deserialize)]
| ^^^^^^^^^ the trait `Serializer` is not implemented for `&u8`
18 | struct S(#[serde(serialize_with = "w::serialize")] u8, u8);
| -------------- required by a bound introduced by this call
|
= help: the following other types implement trait `Serializer`:
&'a mut Formatter<'b>
FlatMapSerializer<'a, M>
_::_serde::__private::ser::content::ContentSerializer<E>
note: required by a bound in `w::serialize`
--> tests/ui/with/incorrect_type.rs:9:28
|
9 | pub fn serialize<T, S: Serializer>(_: S) -> Result<S::Ok, S::Error> {
| ^^^^^^^^^^ required by this bound in `serialize`
error[E0061]: this function takes 1 argument but 2 arguments were supplied
--> tests/ui/with/incorrect_type.rs:18:35
|
18 | struct S(#[serde(serialize_with = "w::serialize")] u8, u8);
| ^^^^^^^^^^^^^^ unexpected argument #2 of type `__S`
|
note: function defined here
--> tests/ui/with/incorrect_type.rs:9:12
|
9 | pub fn serialize<T, S: Serializer>(_: S) -> Result<S::Ok, S::Error> {
| ^^^^^^^^^ ----
error[E0277]: the trait bound `&u8: Serializer` is not satisfied
--> tests/ui/with/incorrect_type.rs:18:35
|
18 | struct S(#[serde(serialize_with = "w::serialize")] u8, u8);
| ^^^^^^^^^^^^^^ the trait `Serializer` is not implemented for `&u8`
|
= help: the following other types implement trait `Serializer`:
&'a mut Formatter<'b>
FlatMapSerializer<'a, M>
_::_serde::__private::ser::content::ContentSerializer<E>
error[E0308]: `?` operator has incompatible types
--> tests/ui/with/incorrect_type.rs:21:37
|
21 | struct D(#[serde(deserialize_with = "w::deserialize")] u8, u8);
| ^^^^^^^^^^^^^^^^ expected `u8`, found `()`
|
= note: `?` operator cannot convert from `()` to `u8`