Skip to content

Commit c7da944

Browse files
committed
Use visitors properly
1 parent d66b42e commit c7da944

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

crates/core/src/util.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,24 @@ pub fn deserialize_string_to_i64<'de, D>(deserializer: D) -> Result<i64, D::Erro
4444
where
4545
D: serde::Deserializer<'de>,
4646
{
47-
deserialize_optional_string_to_i64(deserializer)?
48-
.ok_or_else(|| serde::de::Error::custom("Expected a string."))
47+
struct ValueVisitor;
48+
49+
impl<'de> Visitor<'de> for ValueVisitor {
50+
type Value = i64;
51+
52+
fn expecting(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result {
53+
formatter.write_str("a string")
54+
}
55+
56+
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
57+
where
58+
E: serde::de::Error,
59+
{
60+
v.parse::<i64>().map_err(serde::de::Error::custom)
61+
}
62+
}
63+
64+
deserializer.deserialize_str(ValueVisitor)
4965
}
5066

5167
pub fn deserialize_optional_string_to_i64<'de, D>(deserializer: D) -> Result<Option<i64>, D::Error>
@@ -61,13 +77,6 @@ where
6177
formatter.write_str("a string or null")
6278
}
6379

64-
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
65-
where
66-
E: serde::de::Error,
67-
{
68-
v.parse::<i64>().map(Some).map_err(serde::de::Error::custom)
69-
}
70-
7180
fn visit_none<E>(self) -> Result<Self::Value, E>
7281
where
7382
E: serde::de::Error,
@@ -79,7 +88,7 @@ where
7988
where
8089
D: serde::Deserializer<'de>,
8190
{
82-
deserializer.deserialize_str(self)
91+
Ok(Some(deserialize_string_to_i64(deserializer)?))
8392
}
8493
}
8594

0 commit comments

Comments
 (0)