| 23 | |
| 24 | impl Serialize for Response { |
| 25 | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> |
| 26 | where |
| 27 | S: serde::Serializer, |
| 28 | { |
| 29 | #[derive(Serialize)] |
| 30 | struct Res<'a> { |
| 31 | id: &'a Id, |
| 32 | #[serde(skip_serializing_if = "Option::is_none")] |
| 33 | result: Option<&'a Value>, |
| 34 | #[serde(skip_serializing_if = "Option::is_none")] |
| 35 | error: Option<Value>, |
| 36 | } |
| 37 | if let Response::Ok(id, value) = self { |
| 38 | Res { id, result: Some(value), error: None }.serialize(serializer) |
| 39 | } else if let Response::Err(id, code, message, value) = self { |
| 40 | Res { |
| 41 | id, |
| 42 | result: None, |
| 43 | error: Some(json!({ |
| 44 | "code": code, "message": message, "data": value |
| 45 | })), |
| 46 | } |
| 47 | .serialize(serializer) |
| 48 | } else { |
| 49 | unreachable!() |
| 50 | } |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | impl<'de> Deserialize<'de> for Response { |