| //@ run-pass | |
| #![allow(dead_code)] | |
| trait Deserializer { | |
| fn read_int(&self) -> isize; | |
| } | |
| trait Deserializable<D:Deserializer> { | |
| fn deserialize(d: &D) -> Self; | |
| } | |
| impl<D:Deserializer> Deserializable<D> for isize { | |
| fn deserialize(d: &D) -> isize { | |
| return d.read_int(); | |
| } | |
| } | |
| struct FromThinAir { dummy: () } | |
| impl Deserializer for FromThinAir { | |
| fn read_int(&self) -> isize { 22 } | |
| } | |
| pub fn main() { | |
| let d = FromThinAir { dummy: () }; | |
| let i: isize = Deserializable::deserialize(&d); | |
| assert_eq!(i, 22); | |
| } |