platform_lp/
serialization.rs

1use std::fmt;
2use std::marker::PhantomData;
3
4use serde;
5use Platform;
6
7struct PlatformVisitor {
8    marker: PhantomData<fn() -> Platform>
9}
10
11impl PlatformVisitor {
12    fn new() -> Self {
13        PlatformVisitor {
14            marker : PhantomData
15        }
16    }
17}
18
19impl <'de>serde::de::Visitor<'de> for PlatformVisitor {
20    type Value = Platform;
21
22    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
23        formatter.write_str("platform")
24    }
25    
26    fn visit_str<A>(self, string:&str) -> Result<Self::Value, A> {
27        Ok(Platform::new(string))
28    }
29}
30
31impl serde::Serialize for Platform {
32    fn serialize<S>(&self,serializer : S) -> Result<S::Ok, S::Error> where S : serde::Serializer {
33        serializer.serialize_str(&self.to_short_string())
34    }
35}
36
37// I THINK THIS IS MY ISSUE
38impl <'de> serde::Deserialize<'de> for Platform {
39    fn deserialize<D>(deserializer : D) -> Result<Platform, D::Error> where D : serde::Deserializer<'de> {
40        deserializer.deserialize_str(PlatformVisitor::new())
41    }
42}