diff --git a/src/serializer/text.rs b/src/serializer/text.rs index 12101f2..90ad772 100644 --- a/src/serializer/text.rs +++ b/src/serializer/text.rs @@ -3,7 +3,7 @@ use std::convert::TryFrom; use once_cell::sync::Lazy; use regex::Regex; use serde::{Deserialize, Deserializer}; -use serde_with::{serde_as, DefaultOnError, DeserializeAs, VecSkipError}; +use serde_with::{serde_as, DeserializeAs, VecSkipError}; use crate::{ client::response::url_endpoint::{ @@ -122,13 +122,10 @@ struct RichTextInternal { } /// TextLinkRun is a single component from a YouTube text with links -#[serde_as] #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct RichTextRun { text: String, - #[serde(default)] - #[serde_as(as = "DefaultOnError")] navigation_endpoint: Option, } 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\"}", ] "###); }