Avoid error during deserialization if the result field isn't there

This commit is contained in:
Antonio Scandurra 2021-11-02 14:58:00 +01:00
parent f5aa07aac9
commit 882c8ce696

View file

@ -61,7 +61,7 @@ struct AnyResponse<'a> {
#[serde(default)] #[serde(default)]
error: Option<Error>, error: Option<Error>,
#[serde(borrow)] #[serde(borrow)]
result: &'a RawValue, result: Option<&'a RawValue>,
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
@ -157,8 +157,10 @@ impl LanguageServer {
if let Some(handler) = response_handlers.lock().remove(&id) { if let Some(handler) = response_handlers.lock().remove(&id) {
if let Some(error) = error { if let Some(error) = error {
handler(Err(error)); handler(Err(error));
} else { } else if let Some(result) = result {
handler(Ok(result.get())); handler(Ok(result.get()));
} else {
handler(Ok("null"));
} }
} }
} else { } else {
@ -459,7 +461,7 @@ impl FakeLanguageServer {
let message = serde_json::to_vec(&AnyResponse { let message = serde_json::to_vec(&AnyResponse {
id: request_id.id, id: request_id.id,
error: None, error: None,
result: &RawValue::from_string(result).unwrap(), result: Some(&RawValue::from_string(result).unwrap()),
}) })
.unwrap(); .unwrap();
self.send(message).await; self.send(message).await;