diff --git a/Cargo.lock b/Cargo.lock index fbb79e01fc..7598956951 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1358,6 +1358,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", + "serde_path_to_error", "ssr", "stdx", "syntax", @@ -1526,6 +1527,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f6109f0506e20f7e0f910e51a0079acf41da8e0694e6442527c4ddf5a2b158" +dependencies = [ + "serde", +] + [[package]] name = "serde_repr" version = "0.1.6" diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 0b4d3f4ebb..53e70eaf7b 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -28,6 +28,7 @@ oorandom = "11.1.2" rustc-hash = "1.1.0" serde = { version = "1.0.106", features = ["derive"] } serde_json = { version = "1.0.48", features = ["preserve_order"] } +serde_path_to_error = "0.1" threadpool = "1.7.1" rayon = "1.5" mimalloc = { version = "0.1.19", default-features = false, optional = true } diff --git a/crates/rust-analyzer/src/lib.rs b/crates/rust-analyzer/src/lib.rs index 79fe30e530..d538ad69a1 100644 --- a/crates/rust-analyzer/src/lib.rs +++ b/crates/rust-analyzer/src/lib.rs @@ -46,7 +46,7 @@ pub type Error = Box; pub type Result = std::result::Result; pub fn from_json(what: &'static str, json: serde_json::Value) -> Result { - let res = T::deserialize(&json) + let res = serde_path_to_error::deserialize(&json) .map_err(|e| format!("Failed to deserialize {}: {}; {}", what, e, json))?; Ok(res) }