1 #![allow(clippy::type_repetition_in_bounds)]
2
3 #[test]
test_gen_custom_serde()4 fn test_gen_custom_serde() {
5 #[derive(serde::Serialize, serde::Deserialize)]
6 #[serde(crate = "fake_serde")]
7 struct Foo;
8
9 // Would be overlapping if serde::Serialize were implemented
10 impl AssertNotSerdeSerialize for Foo {}
11 // Would be overlapping if serde::Deserialize were implemented
12 impl<'a> AssertNotSerdeDeserialize<'a> for Foo {}
13
14 fake_serde::assert::<Foo>();
15 }
16
17 mod fake_serde {
18 pub use serde::*;
19
assert<T>() where T: Serialize, T: for<'a> Deserialize<'a>,20 pub fn assert<T>()
21 where
22 T: Serialize,
23 T: for<'a> Deserialize<'a>,
24 {
25 }
26
27 pub trait Serialize {
serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>28 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>;
29 }
30
31 pub trait Deserialize<'a>: Sized {
deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>32 fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>;
33 }
34 }
35
36 trait AssertNotSerdeSerialize {}
37
38 impl<T: serde::Serialize> AssertNotSerdeSerialize for T {}
39
40 trait AssertNotSerdeDeserialize<'a> {}
41
42 impl<'a, T: serde::Deserialize<'a>> AssertNotSerdeDeserialize<'a> for T {}
43