// These just test that serde_codegen is able to produce code that compiles // successfully when there are a variety of generics and non-(de)serializable // types involved. extern crate serde; use self::serde::ser::{Serialize, Serializer}; use self::serde::de::{Deserialize, Deserializer}; ////////////////////////////////////////////////////////////////////////// #[derive(Serialize, Deserialize)] struct With { t: T, #[serde(serialize_with="ser_x", deserialize_with="de_x")] x: X, } #[derive(Serialize, Deserialize)] struct WithRef<'a, T: 'a> { #[serde(skip_deserializing)] t: Option<&'a T>, #[serde(serialize_with="ser_x", deserialize_with="de_x")] x: X, } #[derive(Serialize, Deserialize)] struct Bounds { t: T, option: Option, boxed: Box, option_boxed: Option>, } #[derive(Serialize, Deserialize)] struct NoBounds { t: T, option: Option, boxed: Box, option_boxed: Option>, } #[derive(Serialize, Deserialize)] enum EnumWith { Unit, Newtype( #[serde(serialize_with="ser_x", deserialize_with="de_x")] X), Tuple( T, #[serde(serialize_with="ser_x", deserialize_with="de_x")] X), Struct { t: T, #[serde(serialize_with="ser_x", deserialize_with="de_x")] x: X }, } #[derive(Serialize)] struct MultipleRef<'a, 'b, 'c, T> where T: 'c, 'c: 'b, 'b: 'a { t: T, rrrt: &'a &'b &'c T, } #[derive(Serialize, Deserialize)] struct Newtype( #[serde(serialize_with="ser_x", deserialize_with="de_x")] X ); #[derive(Serialize, Deserialize)] struct Tuple( T, #[serde(serialize_with="ser_x", deserialize_with="de_x")] X, ); ////////////////////////////////////////////////////////////////////////// // Implements neither Serialize nor Deserialize struct X; fn ser_x(_: &X, _: &mut S) -> Result<(), S::Error> { panic!() } fn de_x(_: &mut D) -> Result { panic!() }