|
| 1 | +#[allow(unused)] |
1 | 2 | use serde::{Deserialize, Deserializer, Serialize, de}; |
2 | 3 |
|
3 | 4 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] |
@@ -124,21 +125,10 @@ impl Message { |
124 | 125 | Message::LogNotify(_) => MessageCMD::LogNotify, |
125 | 126 | } |
126 | 127 | } |
127 | | -} |
128 | | - |
129 | | -impl<'de> Deserialize<'de> for Message { |
130 | | - fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
131 | | - where |
132 | | - D: Deserializer<'de>, |
133 | | - { |
134 | | - let value = serde_json::Value::deserialize(deserializer)?; |
135 | | - |
136 | | - let cmd = value |
137 | | - .get("cmd") |
138 | | - .and_then(|v| v.as_i64()) |
139 | | - .ok_or_else(|| de::Error::missing_field("cmd"))?; |
140 | 128 |
|
141 | | - match MessageCMD::from(cmd) { |
| 129 | + pub fn from_str(s: &str, cmd: MessageCMD) -> Result<Self, serde_json::Error> { |
| 130 | + let value: serde_json::Value = serde_json::from_str(s)?; |
| 131 | + match cmd { |
142 | 132 | MessageCMD::InitReq => { |
143 | 133 | let init_req: InitReq = serde_json::from_value(value).map_err(de::Error::custom)?; |
144 | 134 | Ok(Message::InitReq(init_req)) |
@@ -220,7 +210,7 @@ impl<'de> Deserialize<'de> for Message { |
220 | 210 | serde_json::from_value(value).map_err(de::Error::custom)?; |
221 | 211 | Ok(Message::LogNotify(log_notify)) |
222 | 212 | } |
223 | | - _ => Err(de::Error::custom(format!("Unknown command: {}", cmd))), |
| 213 | + _ => Err(de::Error::custom("Unknown command")), |
224 | 214 | } |
225 | 215 | } |
226 | 216 | } |
@@ -448,8 +438,10 @@ pub struct EvalReq { |
448 | 438 | pub struct EvalRsp { |
449 | 439 | pub seq: i32, |
450 | 440 | pub success: bool, |
451 | | - pub error: String, |
452 | | - pub value: Variable, |
| 441 | + #[serde(skip_serializing_if = "Option::is_none")] |
| 442 | + pub error: Option<String>, |
| 443 | + #[serde(skip_serializing_if = "Option::is_none")] |
| 444 | + pub value: Option<Variable>, |
453 | 445 | } |
454 | 446 |
|
455 | 447 | #[derive(Debug, Serialize, Deserialize)] |
|
0 commit comments