use crate::value::{Value, AValue}; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct Symbol(pub String); impl serde::Serialize for Symbol { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { Value::::symbol(&self.0).serialize(serializer) } } impl<'de> serde::Deserialize<'de> for Symbol { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de> { let v = Value::::deserialize(deserializer)?; let s = v.as_symbol().ok_or(serde::de::Error::custom("Expected symbol"))?; Ok(Symbol(s.clone())) } } pub fn serialize(s: &str, serializer: S) -> Result where S: serde::Serializer { use serde::Serialize; Symbol(s.to_string()).serialize(serializer) } pub fn deserialize<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de> { use serde::Deserialize; Symbol::deserialize(deserializer).map(|v| v.0) }