use serde::Deserialize; use serde_with::{serde_as, DefaultOnError}; use crate::serializer::text::Text; use super::{ music_item::{ Button, Grid, ItemSection, MusicMicroformat, MusicThumbnailRenderer, SimpleHeader, SingleColumnBrowseResult, }, SectionList, Tab, }; /// Response model for YouTube Music artists #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicArtist { pub contents: Option>>>, pub header: Option
, #[serde(default)] pub microformat: MusicMicroformat, } #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct Header { #[serde(alias = "musicVisualHeaderRenderer")] pub music_immersive_header_renderer: MusicHeaderRenderer, } #[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct MusicHeaderRenderer { #[serde_as(as = "Text")] pub title: String, #[serde(default)] #[serde_as(as = "DefaultOnError")] pub subscription_button: Option, #[serde_as(as = "Option")] pub description: Option, #[serde(default)] pub thumbnail: MusicThumbnailRenderer, #[serde(default)] #[serde_as(as = "DefaultOnError")] pub share_endpoint: Option, #[serde(default)] #[serde_as(as = "DefaultOnError")] pub start_radio_button: Option