//
//  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]?
//                                            ///单曲/视频ID（playlistItemData存在说明这条数据单曲/视频）
//                                            let playlistItemData:PlaylistItemData?
//                                            ///专辑/歌单ID（navigationEndpoint存在说明这条数据是专辑/歌单）
//                                            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)
//                                                            }
//                                                        }
//                                                    }
//                                                }
//                                            }
//                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
