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
use crate::{Error, Id}; #[derive(Debug, PartialEq, Serialize, Deserialize)] pub struct Failure { pub error: Error, #[serde(skip_serializing_if = "Option::is_none")] pub id: Option<Id>, } #[cfg(test)] mod tests { use super::*; use serde_json; #[test] fn failure_deserialization() { let input = r#"{"error":{"code":-32700,"message":"Parse error"},"id":1}"#; let expected = Failure { error: Error::new_parse_error(), id: Some(Id::Number(1)), }; let result: Failure = serde_json::from_str(input).unwrap(); assert_eq!(result, expected); } #[test] fn failure_serialization() { let input = Failure { error: Error::new_parse_error(), id: Some(Id::Number(1)), }; let expected = r#"{"error":{"code":-32700,"message":"Parse error"},"id":1}"#; let result = serde_json::to_string(&input).unwrap(); assert_eq!(result, expected); } }