Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit 95408e4

Browse files
feat!: Include key name in error (#73)
* feat!: Include key name in error * typo
1 parent 8049a7b commit 95408e4

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

merde/examples/return-deserialize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ where
66
T: OwnedValueDeserialize,
77
{
88
// here `s` is a `String`, but pretend we're making
9-
// a network request intead — the point is is that we
9+
// a network request instead — the point is is that we
1010
// need to borrow from a local from the function body.
1111
let value: Value = merde_json::from_str_via_value(&s).map_err(|e| e.to_static())?;
1212
Ok(T::owned_from_value(Some(value))?)

merde_core/src/deserialize.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,10 @@ where
318318
Some(Value::Map(obj)) => {
319319
let mut map = std::collections::HashMap::new();
320320
for (key, val) in obj.iter() {
321-
let parsed_key = K::from_str(key).map_err(|_| MerdeError::InvalidKey)?;
321+
let parsed_key = K::from_str(key).map_err(|_| MerdeError::InvalidKey {
322+
key: key.clone().into_static(),
323+
type_name: std::any::type_name::<K>(),
324+
})?;
322325
let parsed_value = V::from_value_ref(Some(val))?;
323326
map.insert(parsed_key, parsed_value);
324327
}

merde_core/src/error.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ pub enum MerdeError {
7171
MissingValue,
7272

7373
/// While calling out to [`FromStr::from_str`](std::str::FromStr::from_str) to build a [`HashMap`](std::collections::HashMap), we got an error.
74-
InvalidKey,
74+
InvalidKey {
75+
key: CowStr<'static>,
76+
type_name: &'static str,
77+
},
7578

7679
/// While parsing a datetime, we got an error
7780
InvalidDateTimeValue,
@@ -111,8 +114,12 @@ impl std::fmt::Display for MerdeError {
111114
MerdeError::MissingValue => {
112115
write!(f, "Missing value")
113116
}
114-
MerdeError::InvalidKey => {
115-
write!(f, "Invalid key")
117+
MerdeError::InvalidKey { key, type_name } => {
118+
write!(
119+
f,
120+
"Invalid key: couldn't convert {:?} to type {}",
121+
key, type_name
122+
)
116123
}
117124
MerdeError::InvalidDateTimeValue => {
118125
write!(f, "Invalid date/time value")

0 commit comments

Comments
 (0)