From 882c8ce69654561981c7efc4cb94e2013f553151 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 2 Nov 2021 14:58:00 +0100 Subject: [PATCH] Avoid error during deserialization if the `result` field isn't there --- crates/lsp/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/lsp/src/lib.rs b/crates/lsp/src/lib.rs index 38562e581b..aa8df7b71d 100644 --- a/crates/lsp/src/lib.rs +++ b/crates/lsp/src/lib.rs @@ -61,7 +61,7 @@ struct AnyResponse<'a> { #[serde(default)] error: Option, #[serde(borrow)] - result: &'a RawValue, + result: Option<&'a RawValue>, } #[derive(Serialize, Deserialize)] @@ -157,8 +157,10 @@ impl LanguageServer { if let Some(handler) = response_handlers.lock().remove(&id) { if let Some(error) = error { handler(Err(error)); - } else { + } else if let Some(result) = result { handler(Ok(result.get())); + } else { + handler(Ok("null")); } } } else { @@ -459,7 +461,7 @@ impl FakeLanguageServer { let message = serde_json::to_vec(&AnyResponse { id: request_id.id, error: None, - result: &RawValue::from_string(result).unwrap(), + result: Some(&RawValue::from_string(result).unwrap()), }) .unwrap(); self.send(message).await;