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