1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#![deny(unsafe_code)] use juniper::ID; use serde::{Deserialize, Deserializer, Serializer}; pub fn serialize<S>(value: &ID, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { serializer.serialize_str(&**value) } pub fn deserialize<'de, D>(deserializer: D) -> Result<ID, D::Error> where D: Deserializer<'de>, { let string: String = Deserialize::deserialize(deserializer)?; Ok(ID::new(string)) } #[cfg(test)] mod tests { use super::*; use serde::Serialize; use serde_json::json; #[derive(Serialize, Deserialize)] struct Test(#[serde(with = "self")] pub ID); #[test] fn test_serialize() { let test = Test(ID::new("1")); let json = json!({ "id": test }); assert_eq!(r#"{"id":"1"}"#, json.to_string()) } #[test] fn test_deserialize() { let test: Test = serde_json::from_str(r#""1""#).unwrap(); let id = ID::new("1"); assert_eq!(test.0, id) } }