• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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