Skip to content

Commit aeb4494

Browse files
committed
Fix Deserialize
1 parent 70a8173 commit aeb4494

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

rust/functora-tagged/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub trait Refine<Tag>: Clone + Sized {
1616
}
1717

1818
#[derive(Debug, Error)]
19-
#[error("Refine error: {0}")]
19+
#[error("Refine failed: {0}")]
2020
pub struct RefineError<Rep, Tag>(pub Rep::RefineErrorRep)
2121
where
2222
Rep: Refine<Tag>;
@@ -118,18 +118,18 @@ where
118118
#[cfg(feature = "serde")]
119119
impl<'de, Rep, Tag> Deserialize<'de> for Tagged<Rep, Tag>
120120
where
121-
Rep: FromStr + Refine<Tag>,
122-
Rep::Err: Debug + Display,
121+
Rep: Deserialize<'de> + Refine<Tag>,
123122
{
124123
fn deserialize<D>(
125124
deserializer: D,
126125
) -> Result<Self, D::Error>
127126
where
128127
D: serde::Deserializer<'de>,
129128
{
130-
let s = String::deserialize(deserializer)?;
131-
Tagged::from_str(&s)
132-
.map_err(serde::de::Error::custom)
129+
Rep::deserialize(deserializer).and_then(|rep| {
130+
Tagged::new(rep)
131+
.map_err(serde::de::Error::custom)
132+
})
133133
}
134134
}
135135

rust/functora-tagged/tests/integration.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ fn test_serde_user_id_invalid_refine() {
177177
let err = toml::from_str::<Wrapper>(toml).unwrap_err();
178178
assert!(
179179
err.to_string().contains("Refine failed"),
180-
"Deserialization should fail with a Refine error for invalid user_id"
180+
"Unexpected failure: {err}"
181181
);
182182
let toml = r#"user_id = "user_123""#;
183183
let wrapper: Wrapper = toml::from_str(toml).unwrap();

0 commit comments

Comments
 (0)