diff --git a/src/client/response/channel.rs b/src/client/response/channel.rs index 1092fe8..a8abe40 100644 --- a/src/client/response/channel.rs +++ b/src/client/response/channel.rs @@ -1,10 +1,8 @@ use serde::Deserialize; -use serde_with::serde_as; -use serde_with::{DefaultOnError, VecSkipError}; +use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError}; use super::url_endpoint::NavigationEndpoint; use super::{Alert, ChannelBadge, ContentsRenderer, ResponseContext, Thumbnails, YouTubeListItem}; -use crate::serializer::ignore_any; use crate::serializer::{text::Text, MapResult, VecLogError}; #[serde_as] @@ -108,7 +106,7 @@ pub(crate) enum ChannelContent { }, ChannelAboutFullMetadataRenderer(ChannelFullMetadata), #[default] - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } @@ -154,7 +152,7 @@ pub(crate) enum CarouselHeaderRendererItem { #[serde(default)] avatar: Thumbnails, }, - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/client/response/music_item.rs b/src/client/response/music_item.rs index 0ca66f9..6ece502 100644 --- a/src/client/response/music_item.rs +++ b/src/client/response/music_item.rs @@ -1,5 +1,5 @@ use serde::Deserialize; -use serde_with::{serde_as, DefaultOnError, VecSkipError}; +use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError}; use crate::{ model::{ @@ -8,7 +8,6 @@ use crate::{ }, param::Language, serializer::{ - ignore_any, text::{Text, TextComponents}, MapResult, VecLogError, }, @@ -31,7 +30,7 @@ pub(crate) enum ItemSection { #[serde_as(as = "VecLogError<_>")] contents: MapResult>, }, - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } @@ -201,7 +200,7 @@ pub(crate) struct PlaylistPanelRenderer { #[serde(rename_all = "camelCase")] pub(crate) enum PlaylistPanelVideo { PlaylistPanelVideoRenderer(QueueMusicItem), - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/client/response/music_search.rs b/src/client/response/music_search.rs index d853759..e95e373 100644 --- a/src/client/response/music_search.rs +++ b/src/client/response/music_search.rs @@ -1,7 +1,7 @@ use serde::Deserialize; -use serde_with::{serde_as, VecSkipError}; +use serde_with::{rust::deserialize_ignore_any, serde_as, VecSkipError}; -use crate::serializer::{ignore_any, text::Text}; +use crate::serializer::text::Text; use super::{music_item::MusicShelf, ContentsRenderer, SectionList, Tab}; @@ -28,7 +28,7 @@ pub(crate) enum ItemSection { #[serde_as(as = "VecSkipError<_>")] contents: Vec, }, - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/client/response/playlist.rs b/src/client/response/playlist.rs index 10feacc..0da5571 100644 --- a/src/client/response/playlist.rs +++ b/src/client/response/playlist.rs @@ -1,8 +1,10 @@ use serde::Deserialize; -use serde_with::{json::JsonString, serde_as, DefaultOnError, VecSkipError}; +use serde_with::{ + json::JsonString, rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError, +}; use crate::serializer::text::{Text, TextComponent}; -use crate::serializer::{ignore_any, MapResult, VecLogError}; +use crate::serializer::{MapResult, VecLogError}; use crate::util::MappingError; use super::{ @@ -156,7 +158,7 @@ pub(crate) enum PlaylistItem { continuation_endpoint: ContinuationEndpoint, }, /// No video list item (e.g. ad) or unimplemented item - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/client/response/video_details.rs b/src/client/response/video_details.rs index 8f78d39..78cc816 100644 --- a/src/client/response/video_details.rs +++ b/src/client/response/video_details.rs @@ -1,12 +1,10 @@ #![allow(clippy::enum_variant_names)] use serde::Deserialize; -use serde_with::serde_as; -use serde_with::{DefaultOnError, VecSkipError}; +use serde_with::{rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError}; use crate::serializer::text::TextComponent; use crate::serializer::{ - ignore_any, text::{AccessibilityText, AttributedText, Text, TextComponents}, MapResult, VecLogError, }; @@ -102,7 +100,7 @@ pub(crate) enum VideoResultsItem { /// 1. sectionIdentifier: "comments-entry-point", contains number of comments /// 2. sectionIdentifier: "comment-item-section", contains continuation token ItemSectionRenderer(#[serde_as(deserialize_as = "DefaultOnError")] ItemSection), - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } @@ -335,7 +333,7 @@ pub(crate) enum EngagementPanelRenderer { /// (Description already included in `VideoSecondaryInfoRenderer`) /// - `engagement-panel-searchable-transcript` /// (basically video subtitles in a different format) - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/client/response/video_item.rs b/src/client/response/video_item.rs index c3e4fc3..77184a0 100644 --- a/src/client/response/video_item.rs +++ b/src/client/response/video_item.rs @@ -1,7 +1,9 @@ use fancy_regex::Regex; use once_cell::sync::Lazy; use serde::Deserialize; -use serde_with::{json::JsonString, serde_as, DefaultOnError, VecSkipError}; +use serde_with::{ + json::JsonString, rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError, +}; use time::{Duration, OffsetDateTime}; use super::{ChannelBadge, ContinuationEndpoint, Thumbnails}; @@ -9,7 +11,6 @@ use crate::{ model::{Channel, ChannelId, ChannelItem, ChannelTag, PlaylistItem, VideoItem, YouTubeItem}, param::Language, serializer::{ - ignore_any, text::{AccessibilityText, Text, TextComponent}, MapResult, VecLogError, }, @@ -69,7 +70,7 @@ pub(crate) enum YouTubeListItem { /// Unimplemented: /// - compactPlaylistRenderer (recommended playlists) /// - compactRadioRenderer (recommended mix) - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, } diff --git a/src/serializer/mod.rs b/src/serializer/mod.rs index 6e86ae5..85eabb9 100644 --- a/src/serializer/mod.rs +++ b/src/serializer/mod.rs @@ -10,8 +10,6 @@ pub use vec_log_err::VecLogError; use std::fmt::Debug; -use serde::{de::IgnoredAny, Deserializer}; - /// This represents a result from a deserializing/mapping operation. /// It holds the desired content (`c`) and a list of warning messages, /// if there occurred minor error during the deserializing or mapping @@ -43,33 +41,10 @@ where } } -/// Deserialization method that consumes anything and returns an empty value. -/// Intended to be used for a wildcard enum option. -/// -/// Example: -/// ```rs -/// #[derive(Deserialize)] -/// enum Fruit { -/// Apple { -/// red: bool, -/// }, -/// Banana { -/// yellow: bool, -/// }, -/// #[serde(other, deserialize_with = "deserialize_blackhole")] -/// None, -/// } -/// ``` -pub fn ignore_any<'de, D>(deserializer: D) -> Result<(), D::Error> -where - D: Deserializer<'de>, -{ - deserializer.deserialize_ignored_any(IgnoredAny).and(Ok(())) -} - #[cfg(test)] mod tests { use serde::Deserialize; + use serde_with::rust::deserialize_ignore_any; use super::*; @@ -81,7 +56,7 @@ mod tests { Banana { yellow: bool, }, - #[serde(other, deserialize_with = "ignore_any")] + #[serde(other, deserialize_with = "deserialize_ignore_any")] None, }