Music_Player3/MusicPlayer/MP/MPPositive/Models/JsonStructs(js文件结构)/MPPositive_JsonArtist.swift
2024-05-20 13:44:14 +08:00

837 lines
60 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MPPositive_JsonArtist.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/5/15.
//
import UIKit
///
struct JsonArtist: Codable {
///
let header:Header?
///
let contents:Contents?
enum CodingKeys: String, CodingKey {
case header = "header"
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
header = try values.decodeIfPresent(Header.self, forKey: .header)
contents = try values.decodeIfPresent(Contents.self, forKey: .contents)
}
struct Header: Codable {
let musicImmersiveHeaderRenderer:MusicImmersiveHeaderRenderer?
enum CodingKeys: String, CodingKey {
case musicImmersiveHeaderRenderer = "musicImmersiveHeaderRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicImmersiveHeaderRenderer = try values.decodeIfPresent(MusicImmersiveHeaderRenderer.self, forKey: .musicImmersiveHeaderRenderer)
}
struct MusicImmersiveHeaderRenderer: Codable {
///
let title:Title?
///
let subscriptionButton:SubscriptionButton?
///
let description:Description?
///
let thumbnail:Thumbnail?
enum CodingKeys: String, CodingKey {
case title = "title"
case subscriptionButton = "subscriptionButton"
case description = "description"
case thumbnail = "thumbnail"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
subscriptionButton = try values.decodeIfPresent(SubscriptionButton.self, forKey: .subscriptionButton)
description = try values.decodeIfPresent(Description.self, forKey: .description)
thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
}
struct Title: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
struct SubscriptionButton: Codable {
let subscribeButtonRenderer:SubscribeButtonRenderer?
enum CodingKeys: String, CodingKey {
case subscribeButtonRenderer = "subscribeButtonRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
subscribeButtonRenderer = try values.decodeIfPresent(SubscribeButtonRenderer.self, forKey: .subscribeButtonRenderer)
}
struct SubscribeButtonRenderer: Codable {
///
let subscriberCountText:SubscriberCountText?
///
let subscribedButtonText:SubscribedButtonText?
enum CodingKeys: String, CodingKey {
case subscriberCountText = "subscriberCountText"
case subscribedButtonText = "subscribedButtonText"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
subscriberCountText = try values.decodeIfPresent(SubscriberCountText.self, forKey: .subscriberCountText)
subscribedButtonText = try values.decodeIfPresent(SubscribedButtonText.self, forKey: .subscribedButtonText)
}
struct SubscriberCountText: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
struct SubscribedButtonText: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
}
}
struct Description:Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
let text:String?
enum CodingKeys: String, CodingKey {
case text = "text"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
}
}
}
struct Thumbnail: Codable {
let musicThumbnailRenderer:MusicThumbnailRenderer?
enum CodingKeys: String, CodingKey {
case musicThumbnailRenderer = "musicThumbnailRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicThumbnailRenderer = try values.decodeIfPresent(MusicThumbnailRenderer.self, forKey: .musicThumbnailRenderer)
}
struct MusicThumbnailRenderer: Codable {
let thumbnail:Thumbnail?
enum CodingKeys: String, CodingKey {
case thumbnail = "thumbnail"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
}
struct Thumbnail: Codable {
let thumbnails:[Thumbnails]?
enum CodingKeys: String, CodingKey {
case thumbnails = "thumbnails"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
thumbnails = try values.decodeIfPresent([Thumbnails].self, forKey: .thumbnails)
}
struct Thumbnails: Codable {
let url:String?
enum CodingKeys: String, CodingKey {
case url = "url"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
url = try values.decodeIfPresent(String.self, forKey: .url)
}
}
}
}
}
}
}
struct Contents: Codable {
let singleColumnBrowseResultsRenderer:SingleColumnBrowseResultsRenderer?
enum CodingKeys: String, CodingKey {
case singleColumnBrowseResultsRenderer = "singleColumnBrowseResultsRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
singleColumnBrowseResultsRenderer = try values.decodeIfPresent(SingleColumnBrowseResultsRenderer.self, forKey: .singleColumnBrowseResultsRenderer)
}
struct SingleColumnBrowseResultsRenderer: Codable {
let tabs:[Tab]?
enum CodingKeys: String, CodingKey {
case tabs = "tabs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
tabs = try values.decodeIfPresent([Tab].self, forKey: .tabs)
}
struct Tab: Codable {
let tabRenderer:TabRenderer?
enum CodingKeys: String, CodingKey {
case tabRenderer = "tabRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
tabRenderer = try values.decodeIfPresent(TabRenderer.self, forKey: .tabRenderer)
}
struct TabRenderer: Codable {
let content:Content?
enum CodingKeys: String, CodingKey {
case content = "content"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
content = try values.decodeIfPresent(Content.self, forKey: .content)
}
struct Content: Codable {
let sectionListRenderer:SectionListRenderer?
enum CodingKeys: String, CodingKey {
case sectionListRenderer = "sectionListRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
sectionListRenderer = try values.decodeIfPresent(SectionListRenderer.self, forKey: .sectionListRenderer)
}
struct SectionListRenderer: Codable {
///
let contents:[Content]?
enum CodingKeys: String, CodingKey {
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
}
struct Content: Codable {
///
let musicShelfRenderer:MusicShelfRenderer?
///
let musicCarouselShelfRenderer:MusicCarouselShelfRenderer?
enum CodingKeys: String, CodingKey {
case musicShelfRenderer = "musicShelfRenderer"
case musicCarouselShelfRenderer = "musicCarouselShelfRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicShelfRenderer = try values.decodeIfPresent(MusicShelfRenderer.self, forKey: .musicShelfRenderer)
musicCarouselShelfRenderer = try values.decodeIfPresent(MusicCarouselShelfRenderer.self, forKey: .musicCarouselShelfRenderer)
}
struct MusicShelfRenderer: Codable {
///
let title:Title?
///
let contents:[Content]?
enum CodingKeys: String, CodingKey {
case title = "title"
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
}
struct Title: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
///
let text:String?
///
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case text = "text"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
struct NavigationEndpoint: Codable {
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
struct BrowseEndpoint: Codable {
///Id
let browseId: String?
///
let params: String?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case params = "params"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
params = try values.decodeIfPresent(String.self, forKey: .params)
}
}
}
}
}
struct Content: Codable {
///
let musicResponsiveListItemRenderer:RootMusicResponsiveListItemRenderer?
enum CodingKeys: String, CodingKey {
case musicResponsiveListItemRenderer = "musicResponsiveListItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicResponsiveListItemRenderer = try values.decodeIfPresent(RootMusicResponsiveListItemRenderer.self, forKey: .musicResponsiveListItemRenderer)
}
// struct MusicResponsiveListItemRenderer: Codable {
// ///
// let thumbnail:Thumbnail?
// ///(0)
// let flexColumns:[FlexColumn]?
// ////IDplaylistItemData/
// let playlistItemData:PlaylistItemData?
// ////IDnavigationEndpoint/
// let navigationEndpoint:NavigationEndpoint?
// enum CodingKeys: String, CodingKey {
// case thumbnail = "thumbnail"
// case flexColumns = "flexColumns"
// case playlistItemData = "playlistItemData"
// case navigationEndpoint = "navigationEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
// flexColumns = try values.decodeIfPresent([FlexColumn].self, forKey: .flexColumns)
// playlistItemData = try values.decodeIfPresent(PlaylistItemData.self, forKey: .playlistItemData)
// navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
// }
// struct Thumbnail: Codable {
// let musicThumbnailRenderer:MusicThumbnailRenderer?
// enum CodingKeys: String, CodingKey {
// case musicThumbnailRenderer = "musicThumbnailRenderer"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// musicThumbnailRenderer = try values.decodeIfPresent(MusicThumbnailRenderer.self, forKey: .musicThumbnailRenderer)
// }
// struct MusicThumbnailRenderer: Codable {
// let thumbnail:Thumbnail?
// enum CodingKeys: String, CodingKey {
// case thumbnail = "thumbnail"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
// }
// struct Thumbnail: Codable {
// let thumbnails:[Thumbnails]?
// enum CodingKeys: String, CodingKey {
// case thumbnails = "thumbnails"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnails = try values.decodeIfPresent([Thumbnails].self, forKey: .thumbnails)
// }
// struct Thumbnails: Codable {
// let url:String?
// enum CodingKeys: String, CodingKey {
// case url = "url"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// url = try values.decodeIfPresent(String.self, forKey: .url)
// }
// }
// }
// }
// }
// struct FlexColumn: Codable {
// let musicResponsiveListItemFlexColumnRenderer:MusicResponsiveListItemFlexColumnRenderer?
// enum CodingKeys: String, CodingKey {
// case musicResponsiveListItemFlexColumnRenderer = "musicResponsiveListItemFlexColumnRenderer"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// musicResponsiveListItemFlexColumnRenderer = try values.decodeIfPresent(MusicResponsiveListItemFlexColumnRenderer.self, forKey: .musicResponsiveListItemFlexColumnRenderer)
// }
// struct MusicResponsiveListItemFlexColumnRenderer: Codable {
// let text:Text?
// enum CodingKeys: String, CodingKey {
// case text = "text"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// text = try values.decodeIfPresent(Text.self, forKey: .text)
// }
// struct Text: Codable {
// let runs:[Run]?
// enum CodingKeys: String, CodingKey {
// case runs = "runs"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// runs = try values.decodeIfPresent([Run].self, forKey: .runs)
// }
// struct Run: Codable {
// ///
// let text:String?
// let navigationEndpoint:NavigationEndpoint?
// enum CodingKeys: String, CodingKey {
// case text = "text"
// case navigationEndpoint = "navigationEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// text = try values.decodeIfPresent(String.self, forKey: .text)
// navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
// }
// struct NavigationEndpoint: Codable {
// let watchEndpoint:WatchEndpoint?
// enum CodingKeys: String, CodingKey {
// case watchEndpoint = "watchEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// watchEndpoint = try values.decodeIfPresent(WatchEndpoint.self, forKey: .watchEndpoint)
// }
// struct WatchEndpoint: Codable {
// let playlistId:String?
// enum CodingKeys: String, CodingKey {
// case playlistId = "playlistId"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// playlistId = try values.decodeIfPresent(String.self, forKey: .playlistId)
// }
// }
// }
// }
// }
// }
// }
// struct PlaylistItemData: Codable {
// let videoId:String?
// enum CodingKeys: String, CodingKey {
// case videoId = "videoId"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
// }
// }
// struct NavigationEndpoint: Codable {
// let browseEndpoint:BrowseEndpoint?
// enum CodingKeys: String, CodingKey {
// case browseEndpoint = "browseEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
// }
// struct BrowseEndpoint: Codable {
// let browseId:String?
// let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
// enum CodingKeys: String, CodingKey {
// case browseId = "browseId"
// case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
// browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
// }
// struct BrowseEndpointContextSupportedConfigs: Codable {
// let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
// enum CodingKeys: String, CodingKey {
// case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
// }
// struct BrowseEndpointContextMusicConfig: Codable {
// let pageType:String?
// enum CodingKeys: String, CodingKey {
// case pageType = "pageType"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
// }
// }
// }
// }
// }
// }
}
}
struct MusicCarouselShelfRenderer: Codable {
///
let header:Header?
///
let contents:[Content]?
enum CodingKeys: String, CodingKey {
case header = "header"
case contents = "contents"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
header = try values.decodeIfPresent(Header.self, forKey: .header)
contents = try values.decodeIfPresent([Content].self, forKey: .contents)
}
struct Header: Codable {
let musicCarouselShelfBasicHeaderRenderer:MusicCarouselShelfBasicHeaderRenderer?
enum CodingKeys: String, CodingKey {
case musicCarouselShelfBasicHeaderRenderer = "musicCarouselShelfBasicHeaderRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicCarouselShelfBasicHeaderRenderer = try values.decodeIfPresent(MusicCarouselShelfBasicHeaderRenderer.self, forKey: .musicCarouselShelfBasicHeaderRenderer)
}
struct MusicCarouselShelfBasicHeaderRenderer: Codable {
let title:Title?
enum CodingKeys: String, CodingKey {
case title = "title"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
title = try values.decodeIfPresent(Title.self, forKey: .title)
}
struct Title: Codable {
let runs:[Run]?
enum CodingKeys: String, CodingKey {
case runs = "runs"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
runs = try values.decodeIfPresent([Run].self, forKey: .runs)
}
struct Run: Codable {
///
let text:String?
///
let navigationEndpoint:NavigationEndpoint?
enum CodingKeys: String, CodingKey {
case text = "text"
case navigationEndpoint = "navigationEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
text = try values.decodeIfPresent(String.self, forKey: .text)
navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
}
struct NavigationEndpoint: Codable {
let browseEndpoint:BrowseEndpoint?
enum CodingKeys: String, CodingKey {
case browseEndpoint = "browseEndpoint"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
}
struct BrowseEndpoint: Codable {
///Id
let browseId: String?
///
let params: String?
enum CodingKeys: String, CodingKey {
case browseId = "browseId"
case params = "params"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
params = try values.decodeIfPresent(String.self, forKey: .params)
}
}
}
}
}
}
}
struct Content: Codable {
let musicTwoRowItemRenderer:RootMusicTwoRowItemRenderer?
enum CodingKeys: String, CodingKey {
case musicTwoRowItemRenderer = "musicTwoRowItemRenderer"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
musicTwoRowItemRenderer = try values.decodeIfPresent(RootMusicTwoRowItemRenderer.self, forKey: .musicTwoRowItemRenderer)
}
// struct MusicTwoRowItemRenderer: Codable {
// ///
// let thumbnailRenderer:ThumbnailRenderer?
// ///
// let title:Title?
// ///
// let subtitle:Subtitle?
// ///iD
// let navigationEndpoint:NavigationEndpoint?
// enum CodingKeys: String, CodingKey {
// case thumbnailRenderer = "thumbnailRenderer"
// case title = "title"
// case subtitle = "subtitle"
// case navigationEndpoint = "navigationEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnailRenderer = try values.decodeIfPresent(ThumbnailRenderer.self, forKey: .thumbnailRenderer)
// title = try values.decodeIfPresent(Title.self, forKey: .title)
// subtitle = try values.decodeIfPresent(Subtitle.self, forKey: .subtitle)
// navigationEndpoint = try values.decodeIfPresent(NavigationEndpoint.self, forKey: .navigationEndpoint)
// }
// struct ThumbnailRenderer: Codable {
// let musicThumbnailRenderer:MusicThumbnailRenderer?
// enum CodingKeys: String, CodingKey {
// case musicThumbnailRenderer = "musicThumbnailRenderer"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// musicThumbnailRenderer = try values.decodeIfPresent(MusicThumbnailRenderer.self, forKey: .musicThumbnailRenderer)
// }
// struct MusicThumbnailRenderer: Codable {
// let thumbnail:Thumbnail?
// enum CodingKeys: String, CodingKey {
// case thumbnail = "thumbnail"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnail = try values.decodeIfPresent(Thumbnail.self, forKey: .thumbnail)
// }
// struct Thumbnail: Codable {
// let thumbnails:[Thumbnails]?
// enum CodingKeys: String, CodingKey {
// case thumbnails = "thumbnails"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// thumbnails = try values.decodeIfPresent([Thumbnails].self, forKey: .thumbnails)
// }
// struct Thumbnails: Codable {
// let url:String?
// enum CodingKeys: String, CodingKey {
// case url = "url"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// url = try values.decodeIfPresent(String.self, forKey: .url)
// }
// }
// }
// }
// }
// struct Title: Codable {
// let runs:[Run]?
// enum CodingKeys: String, CodingKey {
// case runs = "runs"
//
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// runs = try values.decodeIfPresent([Run].self, forKey: .runs)
// }
// struct Run: Codable {
// let text:String?
// enum CodingKeys: String, CodingKey {
// case text = "text"
//
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// text = try values.decodeIfPresent(String.self, forKey: .text)
// }
// }
// }
// struct Subtitle: Codable {
// let runs:[Run]?
// enum CodingKeys: String, CodingKey {
// case runs = "runs"
//
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// runs = try values.decodeIfPresent([Run].self, forKey: .runs)
// }
// struct Run: Codable {
// let text:String?
// enum CodingKeys: String, CodingKey {
// case text = "text"
//
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// text = try values.decodeIfPresent(String.self, forKey: .text)
// }
// }
// }
// struct NavigationEndpoint: Codable {
// ////
// let browseEndpoint:BrowseEndpoint?
// ///
// let watchEndpoint:WatchEndpoint?
// enum CodingKeys: String, CodingKey {
// case browseEndpoint = "browseEndpoint"
// case watchEndpoint = "watchEndpoint"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseEndpoint = try values.decodeIfPresent(BrowseEndpoint.self, forKey: .browseEndpoint)
// watchEndpoint = try values.decodeIfPresent(WatchEndpoint.self, forKey: .watchEndpoint)
// }
// struct BrowseEndpoint: Codable {
// let browseId:String?
// let params:String?
// let browseEndpointContextSupportedConfigs:BrowseEndpointContextSupportedConfigs?
// enum CodingKeys: String, CodingKey {
// case browseId = "browseId"
// case params = "params"
// case browseEndpointContextSupportedConfigs = "browseEndpointContextSupportedConfigs"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseId = try values.decodeIfPresent(String.self, forKey: .browseId)
// params = try values.decodeIfPresent(String.self, forKey: .params)
// browseEndpointContextSupportedConfigs = try values.decodeIfPresent(BrowseEndpointContextSupportedConfigs.self, forKey: .browseEndpointContextSupportedConfigs)
// }
// struct BrowseEndpointContextSupportedConfigs: Codable {
// let browseEndpointContextMusicConfig:BrowseEndpointContextMusicConfig?
// enum CodingKeys: String, CodingKey {
// case browseEndpointContextMusicConfig = "browseEndpointContextMusicConfig"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// browseEndpointContextMusicConfig = try values.decodeIfPresent(BrowseEndpointContextMusicConfig.self, forKey: .browseEndpointContextMusicConfig)
// }
// struct BrowseEndpointContextMusicConfig: Codable {
// let pageType:String?
// enum CodingKeys: String, CodingKey {
// case pageType = "pageType"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// pageType = try values.decodeIfPresent(String.self, forKey: .pageType)
// }
// }
// }
// }
// struct WatchEndpoint: Codable {
// ///ID
// let videoId:String?
// ///ID
// let playlistId:String?
// ///
// let watchEndpointMusicSupportedConfigs:WatchEndpointMusicSupportedConfigs?
// enum CodingKeys: String, CodingKey {
// case videoId = "videoId"
// case playlistId = "playlistId"
// case watchEndpointMusicSupportedConfigs = "watchEndpointMusicSupportedConfigs"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// videoId = try values.decodeIfPresent(String.self, forKey: .videoId)
// playlistId = try values.decodeIfPresent(String.self, forKey: .playlistId)
// watchEndpointMusicSupportedConfigs = try values.decodeIfPresent(WatchEndpointMusicSupportedConfigs.self, forKey: .watchEndpointMusicSupportedConfigs)
// }
// struct WatchEndpointMusicSupportedConfigs: Codable {
// let watchEndpointMusicConfig:WatchEndpointMusicConfig?
// enum CodingKeys: String, CodingKey {
// case watchEndpointMusicConfig = "watchEndpointMusicConfig"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// watchEndpointMusicConfig = try values.decodeIfPresent(WatchEndpointMusicConfig.self, forKey: .watchEndpointMusicConfig)
// }
// struct WatchEndpointMusicConfig: Codable {
// let musicVideoType:String?
// enum CodingKeys: String, CodingKey {
// case musicVideoType = "musicVideoType"
// }
// init(from decoder: Decoder) throws {
// let values = try decoder.container(keyedBy: CodingKeys.self)
// musicVideoType = try values.decodeIfPresent(String.self, forKey: .musicVideoType)
// }
// }
// }
// }
// }
// }
}
}
}
}
}
}
}
}
}
}