refactor: use serde_with::rust::deserialize_ignore_any
This commit is contained in:
parent
9501e95505
commit
f7b7c1954c
7 changed files with 23 additions and 50 deletions
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Vec<MusicResponseItem>>,
|
||||
},
|
||||
#[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,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ShowingResultsFor>,
|
||||
},
|
||||
#[serde(other, deserialize_with = "ignore_any")]
|
||||
#[serde(other, deserialize_with = "deserialize_ignore_any")]
|
||||
None,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
Reference in a new issue