Skip to content

Commit 4b9c3f3

Browse files
committed
accept number port
1 parent 652d618 commit 4b9c3f3

File tree

1 file changed

+57
-0
lines changed
  • src/context/emmy_new_debugger

1 file changed

+57
-0
lines changed

src/context/emmy_new_debugger/mod.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,66 @@
11
use serde::{Deserialize, Serialize};
22

3+
/// accpet number as integer
4+
pub mod port_deserializer {
5+
use serde::{de, Deserializer};
6+
use std::fmt;
7+
8+
pub fn deserialize<'de, D>(deserializer: D) -> Result<u16, D::Error>
9+
where
10+
D: Deserializer<'de>,
11+
{
12+
struct PortVisitor;
13+
14+
impl<'de> de::Visitor<'de> for PortVisitor {
15+
type Value = u16;
16+
17+
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
18+
formatter.write_str("一个整数或能转换为整数的小数")
19+
}
20+
21+
// 处理整数
22+
fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E>
23+
where
24+
E: de::Error,
25+
{
26+
if value > u16::MAX as u64 {
27+
return Err(E::custom(format!("端口号超出范围: {}", value)));
28+
}
29+
Ok(value as u16)
30+
}
31+
32+
// 处理有符号整数
33+
fn visit_i64<E>(self, value: i64) -> Result<Self::Value, E>
34+
where
35+
E: de::Error,
36+
{
37+
if value < 0 || value > u16::MAX as i64 {
38+
return Err(E::custom(format!("端口号超出范围: {}", value)));
39+
}
40+
Ok(value as u16)
41+
}
42+
43+
// 处理浮点数
44+
fn visit_f64<E>(self, value: f64) -> Result<Self::Value, E>
45+
where
46+
E: de::Error,
47+
{
48+
if value < 0.0 || value > u16::MAX as f64 {
49+
return Err(E::custom(format!("端口号超出范围: {}", value)));
50+
}
51+
Ok(value as u16)
52+
}
53+
}
54+
55+
deserializer.deserialize_any(PortVisitor)
56+
}
57+
}
58+
359
#[derive(Debug, Clone, Serialize, Deserialize)]
460
#[serde(rename_all = "camelCase")]
561
pub struct EmmyNewDebugArguments {
662
pub host: String,
63+
#[serde(deserialize_with = "port_deserializer::deserialize")]
764
pub port: u16,
865
pub ext: Vec<String>,
966
pub ide_connect_debugger: bool,

0 commit comments

Comments
 (0)