From 27962afc16c8f047e0c28b181e8a55ba7548cde9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Lech?= Date: Thu, 13 Jun 2024 13:38:55 +0200 Subject: [PATCH 1/5] Fix deserialization of id --- Cargo.lock | 12 ++++++++++++ helix-dap/Cargo.toml | 1 + helix-dap/src/types.rs | 4 +++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index c9f89cf4f4db..bb3aa11613f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1351,6 +1351,7 @@ dependencies = [ "helix-stdx", "log", "serde", + "serde-aux", "serde_json", "thiserror", "tokio", @@ -2241,6 +2242,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-aux" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d2e8bfba469d06512e11e3311d4d051a4a387a5b42d010404fecf3200321c95" +dependencies = [ + "chrono", + "serde", + "serde_json", +] + [[package]] name = "serde_derive" version = "1.0.203" diff --git a/helix-dap/Cargo.toml b/helix-dap/Cargo.toml index 3521f5890aeb..3c75406bc7a6 100644 --- a/helix-dap/Cargo.toml +++ b/helix-dap/Cargo.toml @@ -19,6 +19,7 @@ helix-core = { path = "../helix-core" } anyhow = "1.0" log = "0.4" serde = { version = "1.0", features = ["derive"] } +serde-aux = "4.5" serde_json = "1.0" thiserror = "1.0" tokio = { version = "1", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "net", "sync"] } diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs index bbaf53a602c1..d3abb56edee8 100644 --- a/helix-dap/src/types.rs +++ b/helix-dap/src/types.rs @@ -1,4 +1,5 @@ use serde::{Deserialize, Serialize}; +use serde_aux::prelude::deserialize_string_from_number; use serde_json::Value; use std::collections::HashMap; use std::path::PathBuf; @@ -311,7 +312,8 @@ pub struct Variable { #[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Module { - pub id: String, // TODO: || number + #[serde(deserialize_with = "deserialize_string_from_number")] + pub id: String, pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub path: Option, From d1cb4fe394b8704480f0d8ee2db6eca199ef3239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Lech?= Date: Thu, 13 Jun 2024 15:25:26 +0200 Subject: [PATCH 2/5] Removing external dependencies This reverts commit 27962afc16c8f047e0c28b181e8a55ba7548cde9. --- Cargo.lock | 12 ------------ helix-dap/Cargo.toml | 1 - helix-dap/src/types.rs | 22 +++++++++++++++++++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb3aa11613f5..c9f89cf4f4db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1351,7 +1351,6 @@ dependencies = [ "helix-stdx", "log", "serde", - "serde-aux", "serde_json", "thiserror", "tokio", @@ -2242,17 +2241,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-aux" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d2e8bfba469d06512e11e3311d4d051a4a387a5b42d010404fecf3200321c95" -dependencies = [ - "chrono", - "serde", - "serde_json", -] - [[package]] name = "serde_derive" version = "1.0.203" diff --git a/helix-dap/Cargo.toml b/helix-dap/Cargo.toml index 3c75406bc7a6..3521f5890aeb 100644 --- a/helix-dap/Cargo.toml +++ b/helix-dap/Cargo.toml @@ -19,7 +19,6 @@ helix-core = { path = "../helix-core" } anyhow = "1.0" log = "0.4" serde = { version = "1.0", features = ["derive"] } -serde-aux = "4.5" serde_json = "1.0" thiserror = "1.0" tokio = { version = "1", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "net", "sync"] } diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs index d3abb56edee8..58f9337a70cf 100644 --- a/helix-dap/src/types.rs +++ b/helix-dap/src/types.rs @@ -1,7 +1,7 @@ -use serde::{Deserialize, Serialize}; -use serde_aux::prelude::deserialize_string_from_number; +use serde::{Deserialize, Deserializer, Serialize}; use serde_json::Value; use std::collections::HashMap; +use std::i64; use std::path::PathBuf; #[derive( @@ -312,7 +312,7 @@ pub struct Variable { #[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Module { - #[serde(deserialize_with = "deserialize_string_from_number")] + #[serde(deserialize_with = "from_number")] pub id: String, pub name: String, #[serde(skip_serializing_if = "Option::is_none")] @@ -333,6 +333,22 @@ pub struct Module { pub address_range: Option, } +fn from_number<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + #[derive(Deserialize)] + enum NumberOrString { + Number(i64), + String(String), + } + + match NumberOrString::deserialize(deserializer)? { + NumberOrString::Number(n) => Ok(n.to_string()), + NumberOrString::String(s) => Ok(s), + } +} + pub mod requests { use super::*; #[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize, Serialize)] From e97c34edd11b36a43858da8b445a7ee91a98156a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Lech?= Date: Thu, 13 Jun 2024 16:31:36 +0200 Subject: [PATCH 3/5] Fix incorrect import --- helix-dap/src/types.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs index 58f9337a70cf..5cd380ee3fd6 100644 --- a/helix-dap/src/types.rs +++ b/helix-dap/src/types.rs @@ -1,7 +1,6 @@ use serde::{Deserialize, Deserializer, Serialize}; use serde_json::Value; use std::collections::HashMap; -use std::i64; use std::path::PathBuf; #[derive( @@ -338,6 +337,7 @@ where D: Deserializer<'de>, { #[derive(Deserialize)] + #[serde(untagged)] enum NumberOrString { Number(i64), String(String), From 5af9baceae08865f6a9044cd0e0453e1bbfb6638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Lech?= Date: Thu, 13 Jun 2024 16:51:37 +0200 Subject: [PATCH 4/5] Adding tests --- helix-dap/src/lib.rs | 1 + helix-dap/src/test.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 helix-dap/src/test.rs diff --git a/helix-dap/src/lib.rs b/helix-dap/src/lib.rs index d0229249d4da..e2f46da20fdc 100644 --- a/helix-dap/src/lib.rs +++ b/helix-dap/src/lib.rs @@ -1,4 +1,5 @@ mod client; +mod test; mod transport; mod types; diff --git a/helix-dap/src/test.rs b/helix-dap/src/test.rs new file mode 100644 index 000000000000..c9a9b8b2230b --- /dev/null +++ b/helix-dap/src/test.rs @@ -0,0 +1,18 @@ +#[cfg(test)] +mod tests { + use crate::Module; + + #[test] + fn test_deserialize_module_id_from_number() { + let raw = r#"{"id": 0, "name": "Name"}"#; + let module: Module = serde_json::from_str(raw).expect("Error!"); + assert_eq!(module.id, "0"); + } + + #[test] + fn test_deserialize_module_id_from_string() { + let raw = r#"{"id": "0", "name": "Name"}"#; + let module: Module = serde_json::from_str(raw).expect("Error!"); + assert_eq!(module.id, "0"); + } +} From dcb935f4bb2d17b9adea2e0ac3ab580ea2a96726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Lech?= Date: Thu, 13 Jun 2024 17:22:01 +0200 Subject: [PATCH 5/5] Moved tests --- helix-dap/src/lib.rs | 1 - helix-dap/src/test.rs | 18 ------------------ helix-dap/src/types.rs | 14 ++++++++++++++ 3 files changed, 14 insertions(+), 19 deletions(-) delete mode 100644 helix-dap/src/test.rs diff --git a/helix-dap/src/lib.rs b/helix-dap/src/lib.rs index e2f46da20fdc..d0229249d4da 100644 --- a/helix-dap/src/lib.rs +++ b/helix-dap/src/lib.rs @@ -1,5 +1,4 @@ mod client; -mod test; mod transport; mod types; diff --git a/helix-dap/src/test.rs b/helix-dap/src/test.rs deleted file mode 100644 index c9a9b8b2230b..000000000000 --- a/helix-dap/src/test.rs +++ /dev/null @@ -1,18 +0,0 @@ -#[cfg(test)] -mod tests { - use crate::Module; - - #[test] - fn test_deserialize_module_id_from_number() { - let raw = r#"{"id": 0, "name": "Name"}"#; - let module: Module = serde_json::from_str(raw).expect("Error!"); - assert_eq!(module.id, "0"); - } - - #[test] - fn test_deserialize_module_id_from_string() { - let raw = r#"{"id": "0", "name": "Name"}"#; - let module: Module = serde_json::from_str(raw).expect("Error!"); - assert_eq!(module.id, "0"); - } -} diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs index 5cd380ee3fd6..9cec05e655f7 100644 --- a/helix-dap/src/types.rs +++ b/helix-dap/src/types.rs @@ -905,4 +905,18 @@ pub mod events { pub offset: usize, pub count: usize, } + + #[test] + fn test_deserialize_module_id_from_number() { + let raw = r#"{"id": 0, "name": "Name"}"#; + let module: super::Module = serde_json::from_str(raw).expect("Error!"); + assert_eq!(module.id, "0"); + } + + #[test] + fn test_deserialize_module_id_from_string() { + let raw = r#"{"id": "0", "name": "Name"}"#; + let module: super::Module = serde_json::from_str(raw).expect("Error!"); + assert_eq!(module.id, "0"); + } }