DAP: Deserialize number IDs (#10943)
* Fix deserialization of id * Removing external dependencies This reverts commit 27962afc16c8f047e0c28b181e8a55ba7548cde9. * Fix incorrect import * Adding tests * Moved tests --------- Co-authored-by: Sławomir Lech <slawomir.lech@bluesoft.com>
This commit is contained in:
parent
43cc30d225
commit
dbacaaddca
1 changed files with 34 additions and 2 deletions
|
@ -1,4 +1,4 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
use serde_json::Value;
|
||||
use std::collections::HashMap;
|
||||
use std::path::PathBuf;
|
||||
|
@ -311,7 +311,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 = "from_number")]
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub path: Option<PathBuf>,
|
||||
|
@ -331,6 +332,23 @@ pub struct Module {
|
|||
pub address_range: Option<String>,
|
||||
}
|
||||
|
||||
fn from_number<'de, D>(deserializer: D) -> Result<String, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
#[derive(Deserialize)]
|
||||
#[serde(untagged)]
|
||||
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)]
|
||||
|
@ -887,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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue