1 #![allow( 2 clippy::extra_unused_type_parameters, 3 clippy::type_repetition_in_bounds 4 )] 5 6 #[test] test_gen_custom_serdenull7fn 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 assertnull23 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 { serializenull32 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>; 33 } 34 35 #[allow(dead_code)] 36 pub trait Deserialize<'a>: Sized { deserializenull37 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