feat: add album description

This commit is contained in:
ThetaDev 2022-11-06 19:43:24 +01:00
parent 6f07095757
commit dfd33d5e9b
19 changed files with 6200 additions and 79 deletions

View file

@ -1,11 +1,10 @@
use serde::Deserialize;
use serde_with::{serde_as, DefaultOnError};
use crate::serializer::{ignore_any, text::Text, MapResult, VecLogError};
use crate::serializer::{text::Text, MapResult, VecLogError};
use super::{
music_item::{MusicResponseItem, MusicShelf, MusicThumbnailRenderer},
url_endpoint::NavigationEndpoint,
music_item::{ItemSection, MusicResponseItem, MusicThumbnailRenderer},
ContentsRenderer, Tab,
};
@ -29,22 +28,6 @@ pub(crate) struct SectionList<T> {
pub section_list_renderer: ContentsRenderer<T>,
}
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) enum ItemSection {
MusicShelfRenderer(MusicShelf),
MusicCarouselShelfRenderer {
#[serde(default)]
#[serde_as(as = "DefaultOnError")]
header: Option<MusicCarouselShelfHeader>,
#[serde_as(as = "VecLogError<_>")]
contents: MapResult<Vec<MusicResponseItem>>,
},
#[serde(other, deserialize_with = "ignore_any")]
None,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct Header {
@ -82,30 +65,6 @@ pub(crate) struct SubscriptionButtonRenderer {
pub subscriber_count_text: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MusicCarouselShelfHeader {
pub music_carousel_shelf_basic_header_renderer: MusicCarouselShelfHeaderRenderer,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MusicCarouselShelfHeaderRenderer {
pub more_content_button: MoreContentButton,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MoreContentButton {
pub button_renderer: ButtonRenderer,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct ButtonRenderer {
pub navigation_endpoint: NavigationEndpoint,
}
/// Response model for YouTube Music artist album page
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]

View file

@ -8,6 +8,7 @@ use crate::{
},
param::Language,
serializer::{
ignore_any,
text::{Text, TextComponents},
MapResult, VecLogError,
},
@ -19,6 +20,23 @@ use super::{
MusicContinuationData, ThumbnailsWrap,
};
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) enum ItemSection {
#[serde(alias = "musicPlaylistShelfRenderer")]
MusicShelfRenderer(MusicShelf),
MusicCarouselShelfRenderer {
#[serde(default)]
#[serde_as(as = "DefaultOnError")]
header: Option<MusicCarouselShelfHeader>,
#[serde_as(as = "VecLogError<_>")]
contents: MapResult<Vec<MusicResponseItem>>,
},
#[serde(other, deserialize_with = "ignore_any")]
None,
}
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
@ -191,6 +209,30 @@ pub(crate) struct ContinuationContents {
pub music_shelf_continuation: MusicShelf,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MusicCarouselShelfHeader {
pub music_carousel_shelf_basic_header_renderer: MusicCarouselShelfHeaderRenderer,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MusicCarouselShelfHeaderRenderer {
pub more_content_button: MoreContentButton,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MoreContentButton {
pub button_renderer: ButtonRenderer,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct ButtonRenderer {
pub navigation_endpoint: NavigationEndpoint,
}
/*
#MAPPER
*/

View file

@ -1,15 +1,9 @@
use serde::Deserialize;
use serde_with::{serde_as, DefaultOnError, VecSkipError};
use crate::serializer::{
ignore_any,
text::{Text, TextComponents},
MapResult, VecLogError,
};
use crate::serializer::text::{Text, TextComponents};
use super::music_item::{
MusicContentsRenderer, MusicResponseItem, MusicShelf, MusicThumbnailRenderer,
};
use super::music_item::{ItemSection, MusicContentsRenderer, MusicThumbnailRenderer};
use super::{ContentsRenderer, Tab};
/// Response model for YouTube Music playlists and albums
@ -33,20 +27,6 @@ pub(crate) struct SectionList {
pub section_list_renderer: MusicContentsRenderer<ItemSection>,
}
#[serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) enum ItemSection {
#[serde(alias = "musicPlaylistShelfRenderer")]
MusicShelfRenderer(MusicShelf),
MusicCarouselShelfRenderer {
#[serde_as(as = "VecLogError<_>")]
contents: MapResult<Vec<MusicResponseItem>>,
},
#[serde(other, deserialize_with = "ignore_any")]
None,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct Header {
@ -67,7 +47,7 @@ pub(crate) struct HeaderRenderer {
/// `"Album", " • ", <"Helene Fischer">, " • ", "2021"`
#[serde(default)]
pub subtitle: TextComponents,
/// Playlist description. May contain hashtags which are
/// Playlist/album description. May contain hashtags which are
/// displayed as search links on the YouTube website.
#[serde_as(as = "Option<Text>")]
pub description: Option<String>,