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