From 348c8523fe847f2f6ce98317375a7ab65e778ed2 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Mon, 1 Apr 2024 17:27:53 +0200 Subject: [PATCH] revert: "fix: improve VecLogErr messages" (leads to infinite loop) This reverts commit 9a652d851fa962183e60b11cbb4e34477a979aac. --- src/serializer/vec_log_err.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/serializer/vec_log_err.rs b/src/serializer/vec_log_err.rs index c2e89ff..9e3e32c 100644 --- a/src/serializer/vec_log_err.rs +++ b/src/serializer/vec_log_err.rs @@ -20,6 +20,13 @@ where where D: serde::Deserializer<'de>, { + #[derive(serde::Deserialize)] + #[serde(untagged)] + enum GoodOrError { + Good(T), + Error(serde_json::Value), + } + struct SeqVisitor(PhantomData); impl<'de, T> Visitor<'de> for SeqVisitor @@ -39,14 +46,16 @@ where let mut values = Vec::with_capacity(seq.size_hint().unwrap_or_default()); let mut warnings = Vec::new(); - loop { - match seq.next_element::() { - Ok(val) => match val { - Some(val) => values.push(val), - None => break, - }, - Err(e) => { - warnings.push(format!("error deserializing item: {e}")); + while let Some(value) = seq.next_element()? { + match value { + GoodOrError::::Good(value) => { + values.push(value); + } + GoodOrError::::Error(value) => { + warnings.push(format!( + "error deserializing item: {}", + serde_json::to_string(&value).unwrap_or_default() + )); } } } @@ -177,8 +186,8 @@ mod tests { insta::assert_debug_snapshot!(res.items.warnings, @r###" [ - "error deserializing item: missing field `name` at line 1 column 40", - "error deserializing item: missing field `name` at line 1 column 73", + "error deserializing item: {\"xyz\":\"i2\"}", + "error deserializing item: {\"namra\":\"i4\"}", ] "###); }