// @dart=2.9 // To parse this JSON data, do // // final playerResponseJson = playerResponseJsonFromJson(jsonString); import 'dart:convert'; class PlayerResponseJson { PlayerResponseJson({ this.responseContext, this.playabilityStatus, this.streamingData, this.playbackTracking, this.captions, this.videoDetails, this.annotations, this.playerConfig, this.storyboards, this.microformat, this.cards, this.trackingParams, this.attestation, this.messages, this.endscreen, }); final ResponseContext responseContext; final PlayabilityStatus playabilityStatus; final StreamingData streamingData; final PlaybackTracking playbackTracking; final Captions captions; final VideoDetails videoDetails; final List annotations; final PlayerConfig playerConfig; final Storyboards storyboards; final Microformat microformat; final Cards cards; final String trackingParams; final Attestation attestation; final List messages; final Endscreen endscreen; factory PlayerResponseJson.fromRawJson(String str) => PlayerResponseJson.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerResponseJson.fromJson(Map json) => PlayerResponseJson( responseContext: json["responseContext"] == null ? null : ResponseContext.fromJson(json["responseContext"]), playabilityStatus: json["playabilityStatus"] == null ? null : PlayabilityStatus.fromJson(json["playabilityStatus"]), streamingData: json["streamingData"] == null ? null : StreamingData.fromJson(json["streamingData"]), playbackTracking: json["playbackTracking"] == null ? null : PlaybackTracking.fromJson(json["playbackTracking"]), captions: json["captions"] == null ? null : Captions.fromJson(json["captions"]), videoDetails: json["videoDetails"] == null ? null : VideoDetails.fromJson(json["videoDetails"]), annotations: json["annotations"] == null ? null : List.from( json["annotations"].map((x) => Annotation.fromJson(x))), playerConfig: json["playerConfig"] == null ? null : PlayerConfig.fromJson(json["playerConfig"]), storyboards: json["storyboards"] == null ? null : Storyboards.fromJson(json["storyboards"]), microformat: json["microformat"] == null ? null : Microformat.fromJson(json["microformat"]), cards: json["cards"] == null ? null : Cards.fromJson(json["cards"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], attestation: json["attestation"] == null ? null : Attestation.fromJson(json["attestation"]), messages: json["messages"] == null ? null : List.from( json["messages"].map((x) => Message.fromJson(x))), endscreen: json["endscreen"] == null ? null : Endscreen.fromJson(json["endscreen"]), ); Map toJson() => { "responseContext": responseContext == null ? null : responseContext.toJson(), "playabilityStatus": playabilityStatus == null ? null : playabilityStatus.toJson(), "streamingData": streamingData == null ? null : streamingData.toJson(), "playbackTracking": playbackTracking == null ? null : playbackTracking.toJson(), "captions": captions == null ? null : captions.toJson(), "videoDetails": videoDetails == null ? null : videoDetails.toJson(), "annotations": annotations == null ? null : List.from(annotations.map((x) => x.toJson())), "playerConfig": playerConfig == null ? null : playerConfig.toJson(), "storyboards": storyboards == null ? null : storyboards.toJson(), "microformat": microformat == null ? null : microformat.toJson(), "cards": cards == null ? null : cards.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "attestation": attestation == null ? null : attestation.toJson(), "messages": messages == null ? null : List.from(messages.map((x) => x.toJson())), "endscreen": endscreen == null ? null : endscreen.toJson(), }; } class Annotation { Annotation({ this.playerAnnotationsExpandedRenderer, }); final PlayerAnnotationsExpandedRenderer playerAnnotationsExpandedRenderer; factory Annotation.fromRawJson(String str) => Annotation.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Annotation.fromJson(Map json) => Annotation( playerAnnotationsExpandedRenderer: json["playerAnnotationsExpandedRenderer"] == null ? null : PlayerAnnotationsExpandedRenderer.fromJson( json["playerAnnotationsExpandedRenderer"]), ); Map toJson() => { "playerAnnotationsExpandedRenderer": playerAnnotationsExpandedRenderer == null ? null : playerAnnotationsExpandedRenderer.toJson(), }; } class PlayerAnnotationsExpandedRenderer { PlayerAnnotationsExpandedRenderer({ this.featuredChannel, this.allowSwipeDismiss, this.annotationId, }); final FeaturedChannel featuredChannel; final bool allowSwipeDismiss; final String annotationId; factory PlayerAnnotationsExpandedRenderer.fromRawJson(String str) => PlayerAnnotationsExpandedRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerAnnotationsExpandedRenderer.fromJson( Map json) => PlayerAnnotationsExpandedRenderer( featuredChannel: json["featuredChannel"] == null ? null : FeaturedChannel.fromJson(json["featuredChannel"]), allowSwipeDismiss: json["allowSwipeDismiss"] == null ? null : json["allowSwipeDismiss"], annotationId: json["annotationId"] == null ? null : json["annotationId"], ); Map toJson() => { "featuredChannel": featuredChannel == null ? null : featuredChannel.toJson(), "allowSwipeDismiss": allowSwipeDismiss == null ? null : allowSwipeDismiss, "annotationId": annotationId == null ? null : annotationId, }; } class FeaturedChannel { FeaturedChannel({ this.startTimeMs, this.endTimeMs, this.watermark, this.trackingParams, this.navigationEndpoint, this.channelName, this.subscribeButton, }); final String startTimeMs; final String endTimeMs; final IconClass watermark; final String trackingParams; final Endpoint navigationEndpoint; final String channelName; final SubscribeButtonClass subscribeButton; factory FeaturedChannel.fromRawJson(String str) => FeaturedChannel.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FeaturedChannel.fromJson(Map json) => FeaturedChannel( startTimeMs: json["startTimeMs"] == null ? null : json["startTimeMs"], endTimeMs: json["endTimeMs"] == null ? null : json["endTimeMs"], watermark: json["watermark"] == null ? null : IconClass.fromJson(json["watermark"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], navigationEndpoint: json["navigationEndpoint"] == null ? null : Endpoint.fromJson(json["navigationEndpoint"]), channelName: json["channelName"] == null ? null : json["channelName"], subscribeButton: json["subscribeButton"] == null ? null : SubscribeButtonClass.fromJson(json["subscribeButton"]), ); Map toJson() => { "startTimeMs": startTimeMs == null ? null : startTimeMs, "endTimeMs": endTimeMs == null ? null : endTimeMs, "watermark": watermark == null ? null : watermark.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "navigationEndpoint": navigationEndpoint == null ? null : navigationEndpoint.toJson(), "channelName": channelName == null ? null : channelName, "subscribeButton": subscribeButton == null ? null : subscribeButton.toJson(), }; } class Endpoint { Endpoint({ this.clickTrackingParams, this.commandMetadata, this.browseEndpoint, this.watchEndpoint, }); final String clickTrackingParams; final NavigationEndpointCommandMetadata commandMetadata; final BrowseEndpoint browseEndpoint; final NavigationEndpointWatchEndpoint watchEndpoint; factory Endpoint.fromRawJson(String str) => Endpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Endpoint.fromJson(Map json) => Endpoint( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : NavigationEndpointCommandMetadata.fromJson( json["commandMetadata"]), browseEndpoint: json["browseEndpoint"] == null ? null : BrowseEndpoint.fromJson(json["browseEndpoint"]), watchEndpoint: json["watchEndpoint"] == null ? null : NavigationEndpointWatchEndpoint.fromJson(json["watchEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "browseEndpoint": browseEndpoint == null ? null : browseEndpoint.toJson(), "watchEndpoint": watchEndpoint == null ? null : watchEndpoint.toJson(), }; } class BrowseEndpoint { BrowseEndpoint({ this.browseId, }); final String browseId; factory BrowseEndpoint.fromRawJson(String str) => BrowseEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory BrowseEndpoint.fromJson(Map json) => BrowseEndpoint( browseId: json["browseId"] == null ? null : json["browseId"], ); Map toJson() => { "browseId": browseId == null ? null : browseId, }; } class NavigationEndpointCommandMetadata { NavigationEndpointCommandMetadata({ this.webCommandMetadata, }); final PurpleWebCommandMetadata webCommandMetadata; factory NavigationEndpointCommandMetadata.fromRawJson(String str) => NavigationEndpointCommandMetadata.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory NavigationEndpointCommandMetadata.fromJson( Map json) => NavigationEndpointCommandMetadata( webCommandMetadata: json["webCommandMetadata"] == null ? null : PurpleWebCommandMetadata.fromJson(json["webCommandMetadata"]), ); Map toJson() => { "webCommandMetadata": webCommandMetadata == null ? null : webCommandMetadata.toJson(), }; } class PurpleWebCommandMetadata { PurpleWebCommandMetadata({ this.url, this.webPageType, this.rootVe, }); final String url; final WebPageType webPageType; final int rootVe; factory PurpleWebCommandMetadata.fromRawJson(String str) => PurpleWebCommandMetadata.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PurpleWebCommandMetadata.fromJson(Map json) => PurpleWebCommandMetadata( url: json["url"] == null ? null : json["url"], webPageType: json["webPageType"] == null ? null : webPageTypeValues.map[json["webPageType"]], rootVe: json["rootVe"] == null ? null : json["rootVe"], ); Map toJson() => { "url": url == null ? null : url, "webPageType": webPageType == null ? null : webPageTypeValues.reverse[webPageType], "rootVe": rootVe == null ? null : rootVe, }; } enum WebPageType { WEB_PAGE_TYPE_CHANNEL, WEB_PAGE_TYPE_UNKNOWN, WEB_PAGE_TYPE_WATCH } final webPageTypeValues = EnumValues({ "WEB_PAGE_TYPE_CHANNEL": WebPageType.WEB_PAGE_TYPE_CHANNEL, "WEB_PAGE_TYPE_UNKNOWN": WebPageType.WEB_PAGE_TYPE_UNKNOWN, "WEB_PAGE_TYPE_WATCH": WebPageType.WEB_PAGE_TYPE_WATCH }); class NavigationEndpointWatchEndpoint { NavigationEndpointWatchEndpoint({ this.videoId, this.playlistId, }); final String videoId; final String playlistId; factory NavigationEndpointWatchEndpoint.fromRawJson(String str) => NavigationEndpointWatchEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory NavigationEndpointWatchEndpoint.fromJson(Map json) => NavigationEndpointWatchEndpoint( videoId: json["videoId"] == null ? null : json["videoId"], playlistId: json["playlistId"] == null ? null : json["playlistId"], ); Map toJson() => { "videoId": videoId == null ? null : videoId, "playlistId": playlistId == null ? null : playlistId, }; } class SubscribeButtonClass { SubscribeButtonClass({ this.subscribeButtonRenderer, }); final SubscribeButtonRenderer subscribeButtonRenderer; factory SubscribeButtonClass.fromRawJson(String str) => SubscribeButtonClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeButtonClass.fromJson(Map json) => SubscribeButtonClass( subscribeButtonRenderer: json["subscribeButtonRenderer"] == null ? null : SubscribeButtonRenderer.fromJson(json["subscribeButtonRenderer"]), ); Map toJson() => { "subscribeButtonRenderer": subscribeButtonRenderer == null ? null : subscribeButtonRenderer.toJson(), }; } class SubscribeButtonRenderer { SubscribeButtonRenderer({ this.buttonText, this.subscribed, this.enabled, this.type, this.channelId, this.showPreferences, this.subscribedButtonText, this.unsubscribedButtonText, this.trackingParams, this.unsubscribeButtonText, this.serviceEndpoints, this.subscribeAccessibility, this.unsubscribeAccessibility, this.signInEndpoint, }); final MessageTitle buttonText; final bool subscribed; final bool enabled; final String type; final String channelId; final bool showPreferences; final MessageTitle subscribedButtonText; final MessageTitle unsubscribedButtonText; final String trackingParams; final MessageTitle unsubscribeButtonText; final List serviceEndpoints; final SubscribeAccessibilityClass subscribeAccessibility; final SubscribeAccessibilityClass unsubscribeAccessibility; final SigninEndpoint signInEndpoint; factory SubscribeButtonRenderer.fromRawJson(String str) => SubscribeButtonRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeButtonRenderer.fromJson(Map json) => SubscribeButtonRenderer( buttonText: json["buttonText"] == null ? null : MessageTitle.fromJson(json["buttonText"]), subscribed: json["subscribed"] == null ? null : json["subscribed"], enabled: json["enabled"] == null ? null : json["enabled"], type: json["type"] == null ? null : json["type"], channelId: json["channelId"] == null ? null : json["channelId"], showPreferences: json["showPreferences"] == null ? null : json["showPreferences"], subscribedButtonText: json["subscribedButtonText"] == null ? null : MessageTitle.fromJson(json["subscribedButtonText"]), unsubscribedButtonText: json["unsubscribedButtonText"] == null ? null : MessageTitle.fromJson(json["unsubscribedButtonText"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], unsubscribeButtonText: json["unsubscribeButtonText"] == null ? null : MessageTitle.fromJson(json["unsubscribeButtonText"]), serviceEndpoints: json["serviceEndpoints"] == null ? null : List.from(json["serviceEndpoints"] .map((x) => SubscribeCommand.fromJson(x))), subscribeAccessibility: json["subscribeAccessibility"] == null ? null : SubscribeAccessibilityClass.fromJson( json["subscribeAccessibility"]), unsubscribeAccessibility: json["unsubscribeAccessibility"] == null ? null : SubscribeAccessibilityClass.fromJson( json["unsubscribeAccessibility"]), signInEndpoint: json["signInEndpoint"] == null ? null : SigninEndpoint.fromJson(json["signInEndpoint"]), ); Map toJson() => { "buttonText": buttonText == null ? null : buttonText.toJson(), "subscribed": subscribed == null ? null : subscribed, "enabled": enabled == null ? null : enabled, "type": type == null ? null : type, "channelId": channelId == null ? null : channelId, "showPreferences": showPreferences == null ? null : showPreferences, "subscribedButtonText": subscribedButtonText == null ? null : subscribedButtonText.toJson(), "unsubscribedButtonText": unsubscribedButtonText == null ? null : unsubscribedButtonText.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "unsubscribeButtonText": unsubscribeButtonText == null ? null : unsubscribeButtonText.toJson(), "serviceEndpoints": serviceEndpoints == null ? null : List.from(serviceEndpoints.map((x) => x.toJson())), "subscribeAccessibility": subscribeAccessibility == null ? null : subscribeAccessibility.toJson(), "unsubscribeAccessibility": unsubscribeAccessibility == null ? null : unsubscribeAccessibility.toJson(), "signInEndpoint": signInEndpoint == null ? null : signInEndpoint.toJson(), }; } class MessageTitle { MessageTitle({ this.runs, }); final List runs; factory MessageTitle.fromRawJson(String str) => MessageTitle.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MessageTitle.fromJson(Map json) => MessageTitle( runs: json["runs"] == null ? null : List.from(json["runs"].map((x) => Run.fromJson(x))), ); Map toJson() => { "runs": runs == null ? null : List.from(runs.map((x) => x.toJson())), }; } class Run { Run({ this.text, }); final String text; factory Run.fromRawJson(String str) => Run.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Run.fromJson(Map json) => Run( text: json["text"] == null ? null : json["text"], ); Map toJson() => { "text": text == null ? null : text, }; } class SubscribeCommand { SubscribeCommand({ this.clickTrackingParams, this.commandMetadata, this.subscribeEndpoint, this.signalServiceEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final SubscribeEndpoint subscribeEndpoint; final SignalServiceEndpoint signalServiceEndpoint; factory SubscribeCommand.fromRawJson(String str) => SubscribeCommand.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeCommand.fromJson(Map json) => SubscribeCommand( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), subscribeEndpoint: json["subscribeEndpoint"] == null ? null : SubscribeEndpoint.fromJson(json["subscribeEndpoint"]), signalServiceEndpoint: json["signalServiceEndpoint"] == null ? null : SignalServiceEndpoint.fromJson(json["signalServiceEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "subscribeEndpoint": subscribeEndpoint == null ? null : subscribeEndpoint.toJson(), "signalServiceEndpoint": signalServiceEndpoint == null ? null : signalServiceEndpoint.toJson(), }; } class SubscribeCommandCommandMetadata { SubscribeCommandCommandMetadata({ this.webCommandMetadata, }); final FluffyWebCommandMetadata webCommandMetadata; factory SubscribeCommandCommandMetadata.fromRawJson(String str) => SubscribeCommandCommandMetadata.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeCommandCommandMetadata.fromJson(Map json) => SubscribeCommandCommandMetadata( webCommandMetadata: json["webCommandMetadata"] == null ? null : FluffyWebCommandMetadata.fromJson(json["webCommandMetadata"]), ); Map toJson() => { "webCommandMetadata": webCommandMetadata == null ? null : webCommandMetadata.toJson(), }; } class FluffyWebCommandMetadata { FluffyWebCommandMetadata({ this.url, this.sendPost, this.apiUrl, }); final Url url; final bool sendPost; final String apiUrl; factory FluffyWebCommandMetadata.fromRawJson(String str) => FluffyWebCommandMetadata.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FluffyWebCommandMetadata.fromJson(Map json) => FluffyWebCommandMetadata( url: json["url"] == null ? null : urlValues.map[json["url"]], sendPost: json["sendPost"] == null ? null : json["sendPost"], apiUrl: json["apiUrl"] == null ? null : json["apiUrl"], ); Map toJson() => { "url": url == null ? null : urlValues.reverse[url], "sendPost": sendPost == null ? null : sendPost, "apiUrl": apiUrl == null ? null : apiUrl, }; } enum Url { SERVICE_AJAX } final urlValues = EnumValues({"/service_ajax": Url.SERVICE_AJAX}); class SignalServiceEndpoint { SignalServiceEndpoint({ this.signal, this.actions, }); final String signal; final List actions; factory SignalServiceEndpoint.fromRawJson(String str) => SignalServiceEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SignalServiceEndpoint.fromJson(Map json) => SignalServiceEndpoint( signal: json["signal"] == null ? null : json["signal"], actions: json["actions"] == null ? null : List.from(json["actions"] .map((x) => SignalServiceEndpointAction.fromJson(x))), ); Map toJson() => { "signal": signal == null ? null : signal, "actions": actions == null ? null : List.from(actions.map((x) => x.toJson())), }; } class SignalServiceEndpointAction { SignalServiceEndpointAction({ this.clickTrackingParams, this.openPopupAction, }); final String clickTrackingParams; final ActionOpenPopupAction openPopupAction; factory SignalServiceEndpointAction.fromRawJson(String str) => SignalServiceEndpointAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SignalServiceEndpointAction.fromJson(Map json) => SignalServiceEndpointAction( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], openPopupAction: json["openPopupAction"] == null ? null : ActionOpenPopupAction.fromJson(json["openPopupAction"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "openPopupAction": openPopupAction == null ? null : openPopupAction.toJson(), }; } class ActionOpenPopupAction { ActionOpenPopupAction({ this.popup, this.popupType, }); final PurplePopup popup; final String popupType; factory ActionOpenPopupAction.fromRawJson(String str) => ActionOpenPopupAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ActionOpenPopupAction.fromJson(Map json) => ActionOpenPopupAction( popup: json["popup"] == null ? null : PurplePopup.fromJson(json["popup"]), popupType: json["popupType"] == null ? null : json["popupType"], ); Map toJson() => { "popup": popup == null ? null : popup.toJson(), "popupType": popupType == null ? null : popupType, }; } class PurplePopup { PurplePopup({ this.confirmDialogRenderer, }); final ConfirmDialogRenderer confirmDialogRenderer; factory PurplePopup.fromRawJson(String str) => PurplePopup.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PurplePopup.fromJson(Map json) => PurplePopup( confirmDialogRenderer: json["confirmDialogRenderer"] == null ? null : ConfirmDialogRenderer.fromJson(json["confirmDialogRenderer"]), ); Map toJson() => { "confirmDialogRenderer": confirmDialogRenderer == null ? null : confirmDialogRenderer.toJson(), }; } class ConfirmDialogRenderer { ConfirmDialogRenderer({ this.trackingParams, this.dialogMessages, this.confirmButton, this.cancelButton, this.primaryIsCancel, }); final String trackingParams; final List dialogMessages; final CancelButtonClass confirmButton; final CancelButtonClass cancelButton; final bool primaryIsCancel; factory ConfirmDialogRenderer.fromRawJson(String str) => ConfirmDialogRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ConfirmDialogRenderer.fromJson(Map json) => ConfirmDialogRenderer( trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], dialogMessages: json["dialogMessages"] == null ? null : List.from( json["dialogMessages"].map((x) => MessageTitle.fromJson(x))), confirmButton: json["confirmButton"] == null ? null : CancelButtonClass.fromJson(json["confirmButton"]), cancelButton: json["cancelButton"] == null ? null : CancelButtonClass.fromJson(json["cancelButton"]), primaryIsCancel: json["primaryIsCancel"] == null ? null : json["primaryIsCancel"], ); Map toJson() => { "trackingParams": trackingParams == null ? null : trackingParams, "dialogMessages": dialogMessages == null ? null : List.from(dialogMessages.map((x) => x.toJson())), "confirmButton": confirmButton == null ? null : confirmButton.toJson(), "cancelButton": cancelButton == null ? null : cancelButton.toJson(), "primaryIsCancel": primaryIsCancel == null ? null : primaryIsCancel, }; } class CancelButtonClass { CancelButtonClass({ this.buttonRenderer, }); final CancelButtonButtonRenderer buttonRenderer; factory CancelButtonClass.fromRawJson(String str) => CancelButtonClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CancelButtonClass.fromJson(Map json) => CancelButtonClass( buttonRenderer: json["buttonRenderer"] == null ? null : CancelButtonButtonRenderer.fromJson(json["buttonRenderer"]), ); Map toJson() => { "buttonRenderer": buttonRenderer == null ? null : buttonRenderer.toJson(), }; } class CancelButtonButtonRenderer { CancelButtonButtonRenderer({ this.style, this.size, this.isDisabled, this.text, this.accessibility, this.trackingParams, this.serviceEndpoint, }); final String style; final String size; final bool isDisabled; final MessageTitle text; final AccessibilityDataClass accessibility; final String trackingParams; final UnsubscribeCommand serviceEndpoint; factory CancelButtonButtonRenderer.fromRawJson(String str) => CancelButtonButtonRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CancelButtonButtonRenderer.fromJson(Map json) => CancelButtonButtonRenderer( style: json["style"] == null ? null : json["style"], size: json["size"] == null ? null : json["size"], isDisabled: json["isDisabled"] == null ? null : json["isDisabled"], text: json["text"] == null ? null : MessageTitle.fromJson(json["text"]), accessibility: json["accessibility"] == null ? null : AccessibilityDataClass.fromJson(json["accessibility"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], serviceEndpoint: json["serviceEndpoint"] == null ? null : UnsubscribeCommand.fromJson(json["serviceEndpoint"]), ); Map toJson() => { "style": style == null ? null : style, "size": size == null ? null : size, "isDisabled": isDisabled == null ? null : isDisabled, "text": text == null ? null : text.toJson(), "accessibility": accessibility == null ? null : accessibility.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "serviceEndpoint": serviceEndpoint == null ? null : serviceEndpoint.toJson(), }; } class AccessibilityDataClass { AccessibilityDataClass({ this.label, }); final String label; factory AccessibilityDataClass.fromRawJson(String str) => AccessibilityDataClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AccessibilityDataClass.fromJson(Map json) => AccessibilityDataClass( label: json["label"] == null ? null : json["label"], ); Map toJson() => { "label": label == null ? null : label, }; } class UnsubscribeCommand { UnsubscribeCommand({ this.clickTrackingParams, this.commandMetadata, this.unsubscribeEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final SubscribeEndpoint unsubscribeEndpoint; factory UnsubscribeCommand.fromRawJson(String str) => UnsubscribeCommand.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory UnsubscribeCommand.fromJson(Map json) => UnsubscribeCommand( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), unsubscribeEndpoint: json["unsubscribeEndpoint"] == null ? null : SubscribeEndpoint.fromJson(json["unsubscribeEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "unsubscribeEndpoint": unsubscribeEndpoint == null ? null : unsubscribeEndpoint.toJson(), }; } class SubscribeEndpoint { SubscribeEndpoint({ this.channelIds, this.params, }); final List channelIds; final String params; factory SubscribeEndpoint.fromRawJson(String str) => SubscribeEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeEndpoint.fromJson(Map json) => SubscribeEndpoint( channelIds: json["channelIds"] == null ? null : List.from(json["channelIds"].map((x) => x)), params: json["params"] == null ? null : json["params"], ); Map toJson() => { "channelIds": channelIds == null ? null : List.from(channelIds.map((x) => x)), "params": params == null ? null : params, }; } class SigninEndpoint { SigninEndpoint({ this.clickTrackingParams, }); final String clickTrackingParams; factory SigninEndpoint.fromRawJson(String str) => SigninEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SigninEndpoint.fromJson(Map json) => SigninEndpoint( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, }; } class SubscribeAccessibilityClass { SubscribeAccessibilityClass({ this.accessibilityData, }); final AccessibilityDataClass accessibilityData; factory SubscribeAccessibilityClass.fromRawJson(String str) => SubscribeAccessibilityClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SubscribeAccessibilityClass.fromJson(Map json) => SubscribeAccessibilityClass( accessibilityData: json["accessibilityData"] == null ? null : AccessibilityDataClass.fromJson(json["accessibilityData"]), ); Map toJson() => { "accessibilityData": accessibilityData == null ? null : accessibilityData.toJson(), }; } class IconClass { IconClass({ this.thumbnails, }); final List thumbnails; factory IconClass.fromRawJson(String str) => IconClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory IconClass.fromJson(Map json) => IconClass( thumbnails: json["thumbnails"] == null ? null : List.from( json["thumbnails"].map((x) => ThumbnailThumbnail.fromJson(x))), ); Map toJson() => { "thumbnails": thumbnails == null ? null : List.from(thumbnails.map((x) => x.toJson())), }; } class ThumbnailThumbnail { ThumbnailThumbnail({ this.url, this.width, this.height, }); final String url; final int width; final int height; factory ThumbnailThumbnail.fromRawJson(String str) => ThumbnailThumbnail.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ThumbnailThumbnail.fromJson(Map json) => ThumbnailThumbnail( url: json["url"] == null ? null : json["url"], width: json["width"] == null ? null : json["width"], height: json["height"] == null ? null : json["height"], ); Map toJson() => { "url": url == null ? null : url, "width": width == null ? null : width, "height": height == null ? null : height, }; } class Attestation { Attestation({ this.playerAttestationRenderer, }); final PlayerAttestationRenderer playerAttestationRenderer; factory Attestation.fromRawJson(String str) => Attestation.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Attestation.fromJson(Map json) => Attestation( playerAttestationRenderer: json["playerAttestationRenderer"] == null ? null : PlayerAttestationRenderer.fromJson( json["playerAttestationRenderer"]), ); Map toJson() => { "playerAttestationRenderer": playerAttestationRenderer == null ? null : playerAttestationRenderer.toJson(), }; } class PlayerAttestationRenderer { PlayerAttestationRenderer({ this.challenge, this.botguardData, }); final String challenge; final BotguardData botguardData; factory PlayerAttestationRenderer.fromRawJson(String str) => PlayerAttestationRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerAttestationRenderer.fromJson(Map json) => PlayerAttestationRenderer( challenge: json["challenge"] == null ? null : json["challenge"], botguardData: json["botguardData"] == null ? null : BotguardData.fromJson(json["botguardData"]), ); Map toJson() => { "challenge": challenge == null ? null : challenge, "botguardData": botguardData == null ? null : botguardData.toJson(), }; } class BotguardData { BotguardData({ this.program, this.interpreterUrl, }); final String program; final String interpreterUrl; factory BotguardData.fromRawJson(String str) => BotguardData.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory BotguardData.fromJson(Map json) => BotguardData( program: json["program"] == null ? null : json["program"], interpreterUrl: json["interpreterUrl"] == null ? null : json["interpreterUrl"], ); Map toJson() => { "program": program == null ? null : program, "interpreterUrl": interpreterUrl == null ? null : interpreterUrl, }; } class Captions { Captions({ this.playerCaptionsRenderer, this.playerCaptionsTracklistRenderer, }); final PlayerCaptionsRenderer playerCaptionsRenderer; final PlayerCaptionsTracklistRenderer playerCaptionsTracklistRenderer; factory Captions.fromRawJson(String str) => Captions.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Captions.fromJson(Map json) => Captions( playerCaptionsRenderer: json["playerCaptionsRenderer"] == null ? null : PlayerCaptionsRenderer.fromJson(json["playerCaptionsRenderer"]), playerCaptionsTracklistRenderer: json["playerCaptionsTracklistRenderer"] == null ? null : PlayerCaptionsTracklistRenderer.fromJson( json["playerCaptionsTracklistRenderer"]), ); Map toJson() => { "playerCaptionsRenderer": playerCaptionsRenderer == null ? null : playerCaptionsRenderer.toJson(), "playerCaptionsTracklistRenderer": playerCaptionsTracklistRenderer == null ? null : playerCaptionsTracklistRenderer.toJson(), }; } class PlayerCaptionsRenderer { PlayerCaptionsRenderer({ this.baseUrl, this.visibility, }); final String baseUrl; final String visibility; factory PlayerCaptionsRenderer.fromRawJson(String str) => PlayerCaptionsRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerCaptionsRenderer.fromJson(Map json) => PlayerCaptionsRenderer( baseUrl: json["baseUrl"] == null ? null : json["baseUrl"], visibility: json["visibility"] == null ? null : json["visibility"], ); Map toJson() => { "baseUrl": baseUrl == null ? null : baseUrl, "visibility": visibility == null ? null : visibility, }; } class PlayerCaptionsTracklistRenderer { PlayerCaptionsTracklistRenderer({ this.captionTracks, this.audioTracks, this.translationLanguages, this.defaultAudioTrackIndex, }); final List captionTracks; final List audioTracks; final List translationLanguages; final int defaultAudioTrackIndex; factory PlayerCaptionsTracklistRenderer.fromRawJson(String str) => PlayerCaptionsTracklistRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerCaptionsTracklistRenderer.fromJson(Map json) => PlayerCaptionsTracklistRenderer( captionTracks: json["captionTracks"] == null ? null : List.from( json["captionTracks"].map((x) => CaptionTrack.fromJson(x))), audioTracks: json["audioTracks"] == null ? null : List.from( json["audioTracks"].map((x) => AudioTrack.fromJson(x))), translationLanguages: json["translationLanguages"] == null ? null : List.from(json["translationLanguages"] .map((x) => TranslationLanguage.fromJson(x))), defaultAudioTrackIndex: json["defaultAudioTrackIndex"] == null ? null : json["defaultAudioTrackIndex"], ); Map toJson() => { "captionTracks": captionTracks == null ? null : List.from(captionTracks.map((x) => x.toJson())), "audioTracks": audioTracks == null ? null : List.from(audioTracks.map((x) => x.toJson())), "translationLanguages": translationLanguages == null ? null : List.from(translationLanguages.map((x) => x.toJson())), "defaultAudioTrackIndex": defaultAudioTrackIndex == null ? null : defaultAudioTrackIndex, }; } class AudioTrack { AudioTrack({ this.captionTrackIndices, this.defaultCaptionTrackIndex, this.visibility, this.hasDefaultTrack, }); final List captionTrackIndices; final int defaultCaptionTrackIndex; final String visibility; final bool hasDefaultTrack; factory AudioTrack.fromRawJson(String str) => AudioTrack.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AudioTrack.fromJson(Map json) => AudioTrack( captionTrackIndices: json["captionTrackIndices"] == null ? null : List.from(json["captionTrackIndices"].map((x) => x)), defaultCaptionTrackIndex: json["defaultCaptionTrackIndex"] == null ? null : json["defaultCaptionTrackIndex"], visibility: json["visibility"] == null ? null : json["visibility"], hasDefaultTrack: json["hasDefaultTrack"] == null ? null : json["hasDefaultTrack"], ); Map toJson() => { "captionTrackIndices": captionTrackIndices == null ? null : List.from(captionTrackIndices.map((x) => x)), "defaultCaptionTrackIndex": defaultCaptionTrackIndex == null ? null : defaultCaptionTrackIndex, "visibility": visibility == null ? null : visibility, "hasDefaultTrack": hasDefaultTrack == null ? null : hasDefaultTrack, }; } class CaptionTrack { CaptionTrack({ this.baseUrl, this.name, this.vssId, this.languageCode, this.isTranslatable, }); final String baseUrl; final HeaderText name; final String vssId; final String languageCode; final bool isTranslatable; factory CaptionTrack.fromRawJson(String str) => CaptionTrack.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CaptionTrack.fromJson(Map json) => CaptionTrack( baseUrl: json["baseUrl"] == null ? null : json["baseUrl"], name: json["name"] == null ? null : HeaderText.fromJson(json["name"]), vssId: json["vssId"] == null ? null : json["vssId"], languageCode: json["languageCode"] == null ? null : json["languageCode"], isTranslatable: json["isTranslatable"] == null ? null : json["isTranslatable"], ); Map toJson() => { "baseUrl": baseUrl == null ? null : baseUrl, "name": name == null ? null : name.toJson(), "vssId": vssId == null ? null : vssId, "languageCode": languageCode == null ? null : languageCode, "isTranslatable": isTranslatable == null ? null : isTranslatable, }; } class HeaderText { HeaderText({ this.simpleText, }); final String simpleText; factory HeaderText.fromRawJson(String str) => HeaderText.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory HeaderText.fromJson(Map json) => HeaderText( simpleText: json["simpleText"] == null ? null : json["simpleText"], ); Map toJson() => { "simpleText": simpleText == null ? null : simpleText, }; } class TranslationLanguage { TranslationLanguage({ this.languageCode, this.languageName, }); final String languageCode; final HeaderText languageName; factory TranslationLanguage.fromRawJson(String str) => TranslationLanguage.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory TranslationLanguage.fromJson(Map json) => TranslationLanguage( languageCode: json["languageCode"] == null ? null : json["languageCode"], languageName: json["languageName"] == null ? null : HeaderText.fromJson(json["languageName"]), ); Map toJson() => { "languageCode": languageCode == null ? null : languageCode, "languageName": languageName == null ? null : languageName.toJson(), }; } class Cards { Cards({ this.cardCollectionRenderer, }); final CardCollectionRenderer cardCollectionRenderer; factory Cards.fromRawJson(String str) => Cards.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Cards.fromJson(Map json) => Cards( cardCollectionRenderer: json["cardCollectionRenderer"] == null ? null : CardCollectionRenderer.fromJson(json["cardCollectionRenderer"]), ); Map toJson() => { "cardCollectionRenderer": cardCollectionRenderer == null ? null : cardCollectionRenderer.toJson(), }; } class CardCollectionRenderer { CardCollectionRenderer({ this.cards, this.headerText, this.icon, this.closeButton, this.trackingParams, this.allowTeaserDismiss, this.logIconVisibilityUpdates, }); final List cards; final HeaderText headerText; final CloseButton icon; final CloseButton closeButton; final String trackingParams; final bool allowTeaserDismiss; final bool logIconVisibilityUpdates; factory CardCollectionRenderer.fromRawJson(String str) => CardCollectionRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CardCollectionRenderer.fromJson(Map json) => CardCollectionRenderer( cards: json["cards"] == null ? null : List.from(json["cards"].map((x) => Card.fromJson(x))), headerText: json["headerText"] == null ? null : HeaderText.fromJson(json["headerText"]), icon: json["icon"] == null ? null : CloseButton.fromJson(json["icon"]), closeButton: json["closeButton"] == null ? null : CloseButton.fromJson(json["closeButton"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], allowTeaserDismiss: json["allowTeaserDismiss"] == null ? null : json["allowTeaserDismiss"], logIconVisibilityUpdates: json["logIconVisibilityUpdates"] == null ? null : json["logIconVisibilityUpdates"], ); Map toJson() => { "cards": cards == null ? null : List.from(cards.map((x) => x.toJson())), "headerText": headerText == null ? null : headerText.toJson(), "icon": icon == null ? null : icon.toJson(), "closeButton": closeButton == null ? null : closeButton.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "allowTeaserDismiss": allowTeaserDismiss == null ? null : allowTeaserDismiss, "logIconVisibilityUpdates": logIconVisibilityUpdates == null ? null : logIconVisibilityUpdates, }; } class Card { Card({ this.cardRenderer, }); final CardRenderer cardRenderer; factory Card.fromRawJson(String str) => Card.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Card.fromJson(Map json) => Card( cardRenderer: json["cardRenderer"] == null ? null : CardRenderer.fromJson(json["cardRenderer"]), ); Map toJson() => { "cardRenderer": cardRenderer == null ? null : cardRenderer.toJson(), }; } class CardRenderer { CardRenderer({ this.teaser, this.content, this.cueRanges, this.icon, this.trackingParams, this.cardId, this.feature, }); final Teaser teaser; final Content content; final List cueRanges; final CloseButton icon; final String trackingParams; final String cardId; final String feature; factory CardRenderer.fromRawJson(String str) => CardRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CardRenderer.fromJson(Map json) => CardRenderer( teaser: json["teaser"] == null ? null : Teaser.fromJson(json["teaser"]), content: json["content"] == null ? null : Content.fromJson(json["content"]), cueRanges: json["cueRanges"] == null ? null : List.from( json["cueRanges"].map((x) => CueRange.fromJson(x))), icon: json["icon"] == null ? null : CloseButton.fromJson(json["icon"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], cardId: json["cardId"] == null ? null : json["cardId"], feature: json["feature"] == null ? null : json["feature"], ); Map toJson() => { "teaser": teaser == null ? null : teaser.toJson(), "content": content == null ? null : content.toJson(), "cueRanges": cueRanges == null ? null : List.from(cueRanges.map((x) => x.toJson())), "icon": icon == null ? null : icon.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "cardId": cardId == null ? null : cardId, "feature": feature == null ? null : feature, }; } class Content { Content({ this.simpleCardContentRenderer, this.videoInfoCardContentRenderer, }); final SimpleCardContentRenderer simpleCardContentRenderer; final VideoInfoCardContentRenderer videoInfoCardContentRenderer; factory Content.fromRawJson(String str) => Content.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Content.fromJson(Map json) => Content( simpleCardContentRenderer: json["simpleCardContentRenderer"] == null ? null : SimpleCardContentRenderer.fromJson( json["simpleCardContentRenderer"]), videoInfoCardContentRenderer: json["videoInfoCardContentRenderer"] == null ? null : VideoInfoCardContentRenderer.fromJson( json["videoInfoCardContentRenderer"]), ); Map toJson() => { "simpleCardContentRenderer": simpleCardContentRenderer == null ? null : simpleCardContentRenderer.toJson(), "videoInfoCardContentRenderer": videoInfoCardContentRenderer == null ? null : videoInfoCardContentRenderer.toJson(), }; } class SimpleCardContentRenderer { SimpleCardContentRenderer({ this.image, this.title, this.actionButton, this.trackingParams, this.displayDomain, this.showLinkIcon, this.callToAction, this.command, }); final IconClass image; final HeaderText title; final SimpleCardContentRendererActionButton actionButton; final String trackingParams; final HeaderText displayDomain; final bool showLinkIcon; final HeaderText callToAction; final NavigationEndpoint command; factory SimpleCardContentRenderer.fromRawJson(String str) => SimpleCardContentRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SimpleCardContentRenderer.fromJson(Map json) => SimpleCardContentRenderer( image: json["image"] == null ? null : IconClass.fromJson(json["image"]), title: json["title"] == null ? null : HeaderText.fromJson(json["title"]), actionButton: json["actionButton"] == null ? null : SimpleCardContentRendererActionButton.fromJson( json["actionButton"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], displayDomain: json["displayDomain"] == null ? null : HeaderText.fromJson(json["displayDomain"]), showLinkIcon: json["showLinkIcon"] == null ? null : json["showLinkIcon"], callToAction: json["callToAction"] == null ? null : HeaderText.fromJson(json["callToAction"]), command: json["command"] == null ? null : NavigationEndpoint.fromJson(json["command"]), ); Map toJson() => { "image": image == null ? null : image.toJson(), "title": title == null ? null : title.toJson(), "actionButton": actionButton == null ? null : actionButton.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "displayDomain": displayDomain == null ? null : displayDomain.toJson(), "showLinkIcon": showLinkIcon == null ? null : showLinkIcon, "callToAction": callToAction == null ? null : callToAction.toJson(), "command": command == null ? null : command.toJson(), }; } class SimpleCardContentRendererActionButton { SimpleCardContentRendererActionButton({ this.simpleCardButtonRenderer, }); final SimpleCardButtonRenderer simpleCardButtonRenderer; factory SimpleCardContentRendererActionButton.fromRawJson(String str) => SimpleCardContentRendererActionButton.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SimpleCardContentRendererActionButton.fromJson( Map json) => SimpleCardContentRendererActionButton( simpleCardButtonRenderer: json["simpleCardButtonRenderer"] == null ? null : SimpleCardButtonRenderer.fromJson( json["simpleCardButtonRenderer"]), ); Map toJson() => { "simpleCardButtonRenderer": simpleCardButtonRenderer == null ? null : simpleCardButtonRenderer.toJson(), }; } class SimpleCardButtonRenderer { SimpleCardButtonRenderer({ this.text, this.action, this.trackingParams, }); final HeaderText text; final NavigationEndpoint action; final String trackingParams; factory SimpleCardButtonRenderer.fromRawJson(String str) => SimpleCardButtonRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SimpleCardButtonRenderer.fromJson(Map json) => SimpleCardButtonRenderer( text: json["text"] == null ? null : HeaderText.fromJson(json["text"]), action: json["action"] == null ? null : NavigationEndpoint.fromJson(json["action"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "text": text == null ? null : text.toJson(), "action": action == null ? null : action.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, }; } class NavigationEndpoint { NavigationEndpoint({ this.clickTrackingParams, this.commandMetadata, this.urlEndpoint, }); final String clickTrackingParams; final NavigationEndpointCommandMetadata commandMetadata; final UrlEndpoint urlEndpoint; factory NavigationEndpoint.fromRawJson(String str) => NavigationEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory NavigationEndpoint.fromJson(Map json) => NavigationEndpoint( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : NavigationEndpointCommandMetadata.fromJson( json["commandMetadata"]), urlEndpoint: json["urlEndpoint"] == null ? null : UrlEndpoint.fromJson(json["urlEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "urlEndpoint": urlEndpoint == null ? null : urlEndpoint.toJson(), }; } class UrlEndpoint { UrlEndpoint({ this.url, this.target, }); final String url; final String target; factory UrlEndpoint.fromRawJson(String str) => UrlEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory UrlEndpoint.fromJson(Map json) => UrlEndpoint( url: json["url"] == null ? null : json["url"], target: json["target"] == null ? null : json["target"], ); Map toJson() => { "url": url == null ? null : url, "target": target == null ? null : target, }; } class VideoInfoCardContentRenderer { VideoInfoCardContentRenderer({ this.videoThumbnail, this.lengthString, this.videoTitle, this.channelName, this.viewCountText, this.action, this.trackingParams, }); final IconClass videoThumbnail; final Title lengthString; final HeaderText videoTitle; final HeaderText channelName; final HeaderText viewCountText; final VideoInfoCardContentRendererAction action; final String trackingParams; factory VideoInfoCardContentRenderer.fromRawJson(String str) => VideoInfoCardContentRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory VideoInfoCardContentRenderer.fromJson(Map json) => VideoInfoCardContentRenderer( videoThumbnail: json["videoThumbnail"] == null ? null : IconClass.fromJson(json["videoThumbnail"]), lengthString: json["lengthString"] == null ? null : Title.fromJson(json["lengthString"]), videoTitle: json["videoTitle"] == null ? null : HeaderText.fromJson(json["videoTitle"]), channelName: json["channelName"] == null ? null : HeaderText.fromJson(json["channelName"]), viewCountText: json["viewCountText"] == null ? null : HeaderText.fromJson(json["viewCountText"]), action: json["action"] == null ? null : VideoInfoCardContentRendererAction.fromJson(json["action"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "videoThumbnail": videoThumbnail == null ? null : videoThumbnail.toJson(), "lengthString": lengthString == null ? null : lengthString.toJson(), "videoTitle": videoTitle == null ? null : videoTitle.toJson(), "channelName": channelName == null ? null : channelName.toJson(), "viewCountText": viewCountText == null ? null : viewCountText.toJson(), "action": action == null ? null : action.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, }; } class VideoInfoCardContentRendererAction { VideoInfoCardContentRendererAction({ this.clickTrackingParams, this.commandMetadata, this.watchEndpoint, }); final String clickTrackingParams; final NavigationEndpointCommandMetadata commandMetadata; final ActionWatchEndpoint watchEndpoint; factory VideoInfoCardContentRendererAction.fromRawJson(String str) => VideoInfoCardContentRendererAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory VideoInfoCardContentRendererAction.fromJson( Map json) => VideoInfoCardContentRendererAction( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : NavigationEndpointCommandMetadata.fromJson( json["commandMetadata"]), watchEndpoint: json["watchEndpoint"] == null ? null : ActionWatchEndpoint.fromJson(json["watchEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "watchEndpoint": watchEndpoint == null ? null : watchEndpoint.toJson(), }; } class ActionWatchEndpoint { ActionWatchEndpoint({ this.videoId, }); final String videoId; factory ActionWatchEndpoint.fromRawJson(String str) => ActionWatchEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ActionWatchEndpoint.fromJson(Map json) => ActionWatchEndpoint( videoId: json["videoId"] == null ? null : json["videoId"], ); Map toJson() => { "videoId": videoId == null ? null : videoId, }; } class Title { Title({ this.accessibility, this.simpleText, }); final SubscribeAccessibilityClass accessibility; final String simpleText; factory Title.fromRawJson(String str) => Title.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Title.fromJson(Map json) => Title( accessibility: json["accessibility"] == null ? null : SubscribeAccessibilityClass.fromJson(json["accessibility"]), simpleText: json["simpleText"] == null ? null : json["simpleText"], ); Map toJson() => { "accessibility": accessibility == null ? null : accessibility.toJson(), "simpleText": simpleText == null ? null : simpleText, }; } class CueRange { CueRange({ this.startCardActiveMs, this.endCardActiveMs, this.teaserDurationMs, this.iconAfterTeaserMs, }); final String startCardActiveMs; final String endCardActiveMs; final String teaserDurationMs; final String iconAfterTeaserMs; factory CueRange.fromRawJson(String str) => CueRange.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CueRange.fromJson(Map json) => CueRange( startCardActiveMs: json["startCardActiveMs"] == null ? null : json["startCardActiveMs"], endCardActiveMs: json["endCardActiveMs"] == null ? null : json["endCardActiveMs"], teaserDurationMs: json["teaserDurationMs"] == null ? null : json["teaserDurationMs"], iconAfterTeaserMs: json["iconAfterTeaserMs"] == null ? null : json["iconAfterTeaserMs"], ); Map toJson() => { "startCardActiveMs": startCardActiveMs == null ? null : startCardActiveMs, "endCardActiveMs": endCardActiveMs == null ? null : endCardActiveMs, "teaserDurationMs": teaserDurationMs == null ? null : teaserDurationMs, "iconAfterTeaserMs": iconAfterTeaserMs == null ? null : iconAfterTeaserMs, }; } class CloseButton { CloseButton({ this.infoCardIconRenderer, }); final InfoCardIconRenderer infoCardIconRenderer; factory CloseButton.fromRawJson(String str) => CloseButton.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory CloseButton.fromJson(Map json) => CloseButton( infoCardIconRenderer: json["infoCardIconRenderer"] == null ? null : InfoCardIconRenderer.fromJson(json["infoCardIconRenderer"]), ); Map toJson() => { "infoCardIconRenderer": infoCardIconRenderer == null ? null : infoCardIconRenderer.toJson(), }; } class InfoCardIconRenderer { InfoCardIconRenderer({ this.trackingParams, }); final String trackingParams; factory InfoCardIconRenderer.fromRawJson(String str) => InfoCardIconRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory InfoCardIconRenderer.fromJson(Map json) => InfoCardIconRenderer( trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "trackingParams": trackingParams == null ? null : trackingParams, }; } class Teaser { Teaser({ this.simpleCardTeaserRenderer, }); final SimpleCardTeaserRenderer simpleCardTeaserRenderer; factory Teaser.fromRawJson(String str) => Teaser.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Teaser.fromJson(Map json) => Teaser( simpleCardTeaserRenderer: json["simpleCardTeaserRenderer"] == null ? null : SimpleCardTeaserRenderer.fromJson( json["simpleCardTeaserRenderer"]), ); Map toJson() => { "simpleCardTeaserRenderer": simpleCardTeaserRenderer == null ? null : simpleCardTeaserRenderer.toJson(), }; } class SimpleCardTeaserRenderer { SimpleCardTeaserRenderer({ this.message, this.trackingParams, this.prominent, this.logVisibilityUpdates, }); final HeaderText message; final String trackingParams; final bool prominent; final bool logVisibilityUpdates; factory SimpleCardTeaserRenderer.fromRawJson(String str) => SimpleCardTeaserRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory SimpleCardTeaserRenderer.fromJson(Map json) => SimpleCardTeaserRenderer( message: json["message"] == null ? null : HeaderText.fromJson(json["message"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], prominent: json["prominent"] == null ? null : json["prominent"], logVisibilityUpdates: json["logVisibilityUpdates"] == null ? null : json["logVisibilityUpdates"], ); Map toJson() => { "message": message == null ? null : message.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "prominent": prominent == null ? null : prominent, "logVisibilityUpdates": logVisibilityUpdates == null ? null : logVisibilityUpdates, }; } class Endscreen { Endscreen({ this.endscreenRenderer, }); final EndscreenRenderer endscreenRenderer; factory Endscreen.fromRawJson(String str) => Endscreen.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Endscreen.fromJson(Map json) => Endscreen( endscreenRenderer: json["endscreenRenderer"] == null ? null : EndscreenRenderer.fromJson(json["endscreenRenderer"]), ); Map toJson() => { "endscreenRenderer": endscreenRenderer == null ? null : endscreenRenderer.toJson(), }; } class EndscreenRenderer { EndscreenRenderer({ this.elements, this.startMs, this.trackingParams, }); final List elements; final String startMs; final String trackingParams; factory EndscreenRenderer.fromRawJson(String str) => EndscreenRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory EndscreenRenderer.fromJson(Map json) => EndscreenRenderer( elements: json["elements"] == null ? null : List.from( json["elements"].map((x) => Element.fromJson(x))), startMs: json["startMs"] == null ? null : json["startMs"], trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "elements": elements == null ? null : List.from(elements.map((x) => x.toJson())), "startMs": startMs == null ? null : startMs, "trackingParams": trackingParams == null ? null : trackingParams, }; } class Element { Element({ this.endscreenElementRenderer, }); final EndscreenElementRenderer endscreenElementRenderer; factory Element.fromRawJson(String str) => Element.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Element.fromJson(Map json) => Element( endscreenElementRenderer: json["endscreenElementRenderer"] == null ? null : EndscreenElementRenderer.fromJson( json["endscreenElementRenderer"]), ); Map toJson() => { "endscreenElementRenderer": endscreenElementRenderer == null ? null : endscreenElementRenderer.toJson(), }; } class EndscreenElementRenderer { EndscreenElementRenderer({ this.style, this.image, this.icon, this.left, this.width, this.top, this.aspectRatio, this.startMs, this.endMs, this.title, this.metadata, this.callToAction, this.dismiss, this.endpoint, this.hovercardButton, this.trackingParams, this.isSubscribe, this.signinEndpoint, this.id, this.playlistLength, this.videoDuration, }); final String style; final IconClass image; final Icon icon; final double left; final double width; final double top; final double aspectRatio; final String startMs; final String endMs; final Title title; final HeaderText metadata; final HeaderText callToAction; final HeaderText dismiss; final Endpoint endpoint; final SubscribeButtonClass hovercardButton; final String trackingParams; final bool isSubscribe; final SigninEndpoint signinEndpoint; final String id; final HeaderText playlistLength; final HeaderText videoDuration; factory EndscreenElementRenderer.fromRawJson(String str) => EndscreenElementRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory EndscreenElementRenderer.fromJson(Map json) => EndscreenElementRenderer( style: json["style"] == null ? null : json["style"], image: json["image"] == null ? null : IconClass.fromJson(json["image"]), icon: json["icon"] == null ? null : Icon.fromJson(json["icon"]), left: json["left"] == null ? null : json["left"].toDouble(), width: json["width"] == null ? null : json["width"].toDouble(), top: json["top"] == null ? null : json["top"].toDouble(), aspectRatio: json["aspectRatio"] == null ? null : json["aspectRatio"].toDouble(), startMs: json["startMs"] == null ? null : json["startMs"], endMs: json["endMs"] == null ? null : json["endMs"], title: json["title"] == null ? null : Title.fromJson(json["title"]), metadata: json["metadata"] == null ? null : HeaderText.fromJson(json["metadata"]), callToAction: json["callToAction"] == null ? null : HeaderText.fromJson(json["callToAction"]), dismiss: json["dismiss"] == null ? null : HeaderText.fromJson(json["dismiss"]), endpoint: json["endpoint"] == null ? null : Endpoint.fromJson(json["endpoint"]), hovercardButton: json["hovercardButton"] == null ? null : SubscribeButtonClass.fromJson(json["hovercardButton"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], isSubscribe: json["isSubscribe"] == null ? null : json["isSubscribe"], signinEndpoint: json["signinEndpoint"] == null ? null : SigninEndpoint.fromJson(json["signinEndpoint"]), id: json["id"] == null ? null : json["id"], playlistLength: json["playlistLength"] == null ? null : HeaderText.fromJson(json["playlistLength"]), videoDuration: json["videoDuration"] == null ? null : HeaderText.fromJson(json["videoDuration"]), ); Map toJson() => { "style": style == null ? null : style, "image": image == null ? null : image.toJson(), "icon": icon == null ? null : icon.toJson(), "left": left == null ? null : left, "width": width == null ? null : width, "top": top == null ? null : top, "aspectRatio": aspectRatio == null ? null : aspectRatio, "startMs": startMs == null ? null : startMs, "endMs": endMs == null ? null : endMs, "title": title == null ? null : title.toJson(), "metadata": metadata == null ? null : metadata.toJson(), "callToAction": callToAction == null ? null : callToAction.toJson(), "dismiss": dismiss == null ? null : dismiss.toJson(), "endpoint": endpoint == null ? null : endpoint.toJson(), "hovercardButton": hovercardButton == null ? null : hovercardButton.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "isSubscribe": isSubscribe == null ? null : isSubscribe, "signinEndpoint": signinEndpoint == null ? null : signinEndpoint.toJson(), "id": id == null ? null : id, "playlistLength": playlistLength == null ? null : playlistLength.toJson(), "videoDuration": videoDuration == null ? null : videoDuration.toJson(), }; } class Icon { Icon({ this.thumbnails, }); final List thumbnails; factory Icon.fromRawJson(String str) => Icon.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Icon.fromJson(Map json) => Icon( thumbnails: json["thumbnails"] == null ? null : List.from( json["thumbnails"].map((x) => PurpleThumbnail.fromJson(x))), ); Map toJson() => { "thumbnails": thumbnails == null ? null : List.from(thumbnails.map((x) => x.toJson())), }; } class PurpleThumbnail { PurpleThumbnail({ this.url, }); final String url; factory PurpleThumbnail.fromRawJson(String str) => PurpleThumbnail.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PurpleThumbnail.fromJson(Map json) => PurpleThumbnail( url: json["url"] == null ? null : json["url"], ); Map toJson() => { "url": url == null ? null : url, }; } class Message { Message({ this.mealbarPromoRenderer, }); final MealbarPromoRenderer mealbarPromoRenderer; factory Message.fromRawJson(String str) => Message.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Message.fromJson(Map json) => Message( mealbarPromoRenderer: json["mealbarPromoRenderer"] == null ? null : MealbarPromoRenderer.fromJson(json["mealbarPromoRenderer"]), ); Map toJson() => { "mealbarPromoRenderer": mealbarPromoRenderer == null ? null : mealbarPromoRenderer.toJson(), }; } class MealbarPromoRenderer { MealbarPromoRenderer({ this.icon, this.messageTexts, this.actionButton, this.dismissButton, this.triggerCondition, this.style, this.trackingParams, this.impressionEndpoints, this.isVisible, this.messageTitle, }); final IconClass icon; final List messageTexts; final ActionButtonClass actionButton; final ActionButtonClass dismissButton; final String triggerCondition; final String style; final String trackingParams; final List impressionEndpoints; final bool isVisible; final MessageTitle messageTitle; factory MealbarPromoRenderer.fromRawJson(String str) => MealbarPromoRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MealbarPromoRenderer.fromJson(Map json) => MealbarPromoRenderer( icon: json["icon"] == null ? null : IconClass.fromJson(json["icon"]), messageTexts: json["messageTexts"] == null ? null : List.from( json["messageTexts"].map((x) => MessageTitle.fromJson(x))), actionButton: json["actionButton"] == null ? null : ActionButtonClass.fromJson(json["actionButton"]), dismissButton: json["dismissButton"] == null ? null : ActionButtonClass.fromJson(json["dismissButton"]), triggerCondition: json["triggerCondition"] == null ? null : json["triggerCondition"], style: json["style"] == null ? null : json["style"], trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], impressionEndpoints: json["impressionEndpoints"] == null ? null : List.from(json["impressionEndpoints"] .map((x) => ImpressionEndpointElement.fromJson(x))), isVisible: json["isVisible"] == null ? null : json["isVisible"], messageTitle: json["messageTitle"] == null ? null : MessageTitle.fromJson(json["messageTitle"]), ); Map toJson() => { "icon": icon == null ? null : icon.toJson(), "messageTexts": messageTexts == null ? null : List.from(messageTexts.map((x) => x.toJson())), "actionButton": actionButton == null ? null : actionButton.toJson(), "dismissButton": dismissButton == null ? null : dismissButton.toJson(), "triggerCondition": triggerCondition == null ? null : triggerCondition, "style": style == null ? null : style, "trackingParams": trackingParams == null ? null : trackingParams, "impressionEndpoints": impressionEndpoints == null ? null : List.from(impressionEndpoints.map((x) => x.toJson())), "isVisible": isVisible == null ? null : isVisible, "messageTitle": messageTitle == null ? null : messageTitle.toJson(), }; } class ActionButtonClass { ActionButtonClass({ this.buttonRenderer, }); final DismissButtonButtonRenderer buttonRenderer; factory ActionButtonClass.fromRawJson(String str) => ActionButtonClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ActionButtonClass.fromJson(Map json) => ActionButtonClass( buttonRenderer: json["buttonRenderer"] == null ? null : DismissButtonButtonRenderer.fromJson(json["buttonRenderer"]), ); Map toJson() => { "buttonRenderer": buttonRenderer == null ? null : buttonRenderer.toJson(), }; } class DismissButtonButtonRenderer { DismissButtonButtonRenderer({ this.style, this.size, this.text, this.serviceEndpoint, this.navigationEndpoint, this.trackingParams, }); final String style; final String size; final MessageTitle text; final ImpressionEndpointElement serviceEndpoint; final NavigationEndpoint navigationEndpoint; final String trackingParams; factory DismissButtonButtonRenderer.fromRawJson(String str) => DismissButtonButtonRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory DismissButtonButtonRenderer.fromJson(Map json) => DismissButtonButtonRenderer( style: json["style"] == null ? null : json["style"], size: json["size"] == null ? null : json["size"], text: json["text"] == null ? null : MessageTitle.fromJson(json["text"]), serviceEndpoint: json["serviceEndpoint"] == null ? null : ImpressionEndpointElement.fromJson(json["serviceEndpoint"]), navigationEndpoint: json["navigationEndpoint"] == null ? null : NavigationEndpoint.fromJson(json["navigationEndpoint"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "style": style == null ? null : style, "size": size == null ? null : size, "text": text == null ? null : text.toJson(), "serviceEndpoint": serviceEndpoint == null ? null : serviceEndpoint.toJson(), "navigationEndpoint": navigationEndpoint == null ? null : navigationEndpoint.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, }; } class ImpressionEndpointElement { ImpressionEndpointElement({ this.clickTrackingParams, this.commandMetadata, this.feedbackEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final FeedbackEndpoint feedbackEndpoint; factory ImpressionEndpointElement.fromRawJson(String str) => ImpressionEndpointElement.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ImpressionEndpointElement.fromJson(Map json) => ImpressionEndpointElement( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), feedbackEndpoint: json["feedbackEndpoint"] == null ? null : FeedbackEndpoint.fromJson(json["feedbackEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "feedbackEndpoint": feedbackEndpoint == null ? null : feedbackEndpoint.toJson(), }; } class FeedbackEndpoint { FeedbackEndpoint({ this.feedbackToken, this.uiActions, }); final String feedbackToken; final UiActions uiActions; factory FeedbackEndpoint.fromRawJson(String str) => FeedbackEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FeedbackEndpoint.fromJson(Map json) => FeedbackEndpoint( feedbackToken: json["feedbackToken"] == null ? null : json["feedbackToken"], uiActions: json["uiActions"] == null ? null : UiActions.fromJson(json["uiActions"]), ); Map toJson() => { "feedbackToken": feedbackToken == null ? null : feedbackToken, "uiActions": uiActions == null ? null : uiActions.toJson(), }; } class UiActions { UiActions({ this.hideEnclosingContainer, }); final bool hideEnclosingContainer; factory UiActions.fromRawJson(String str) => UiActions.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory UiActions.fromJson(Map json) => UiActions( hideEnclosingContainer: json["hideEnclosingContainer"] == null ? null : json["hideEnclosingContainer"], ); Map toJson() => { "hideEnclosingContainer": hideEnclosingContainer == null ? null : hideEnclosingContainer, }; } class Microformat { Microformat({ this.playerMicroformatRenderer, }); final PlayerMicroformatRenderer playerMicroformatRenderer; factory Microformat.fromRawJson(String str) => Microformat.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Microformat.fromJson(Map json) => Microformat( playerMicroformatRenderer: json["playerMicroformatRenderer"] == null ? null : PlayerMicroformatRenderer.fromJson( json["playerMicroformatRenderer"]), ); Map toJson() => { "playerMicroformatRenderer": playerMicroformatRenderer == null ? null : playerMicroformatRenderer.toJson(), }; } class PlayerMicroformatRenderer { PlayerMicroformatRenderer({ this.thumbnail, this.embed, this.title, this.description, this.lengthSeconds, this.ownerProfileUrl, this.externalChannelId, this.availableCountries, this.isUnlisted, this.hasYpcMetadata, this.viewCount, this.category, this.publishDate, this.ownerChannelName, this.uploadDate, this.liveBroadcastDetails, }); final IconClass thumbnail; final Embed embed; final HeaderText title; final HeaderText description; final String lengthSeconds; final String ownerProfileUrl; final String externalChannelId; final List availableCountries; final bool isUnlisted; final bool hasYpcMetadata; final String viewCount; final String category; final DateTime publishDate; final String ownerChannelName; final DateTime uploadDate; final LiveBroadcastDetails liveBroadcastDetails; factory PlayerMicroformatRenderer.fromRawJson(String str) => PlayerMicroformatRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerMicroformatRenderer.fromJson(Map json) => PlayerMicroformatRenderer( thumbnail: json["thumbnail"] == null ? null : IconClass.fromJson(json["thumbnail"]), embed: json["embed"] == null ? null : Embed.fromJson(json["embed"]), title: json["title"] == null ? null : HeaderText.fromJson(json["title"]), description: json["description"] == null ? null : HeaderText.fromJson(json["description"]), lengthSeconds: json["lengthSeconds"] == null ? null : json["lengthSeconds"], ownerProfileUrl: json["ownerProfileUrl"] == null ? null : json["ownerProfileUrl"], externalChannelId: json["externalChannelId"] == null ? null : json["externalChannelId"], availableCountries: json["availableCountries"] == null ? null : List.from(json["availableCountries"].map((x) => x)), isUnlisted: json["isUnlisted"] == null ? null : json["isUnlisted"], hasYpcMetadata: json["hasYpcMetadata"] == null ? null : json["hasYpcMetadata"], viewCount: json["viewCount"] == null ? null : json["viewCount"], category: json["category"] == null ? null : json["category"], publishDate: json["publishDate"] == null ? null : DateTime.parse(json["publishDate"]), ownerChannelName: json["ownerChannelName"] == null ? null : json["ownerChannelName"], uploadDate: json["uploadDate"] == null ? null : DateTime.parse(json["uploadDate"]), liveBroadcastDetails: json["liveBroadcastDetails"] == null ? null : LiveBroadcastDetails.fromJson(json["liveBroadcastDetails"]), ); Map toJson() => { "thumbnail": thumbnail == null ? null : thumbnail.toJson(), "embed": embed == null ? null : embed.toJson(), "title": title == null ? null : title.toJson(), "description": description == null ? null : description.toJson(), "lengthSeconds": lengthSeconds == null ? null : lengthSeconds, "ownerProfileUrl": ownerProfileUrl == null ? null : ownerProfileUrl, "externalChannelId": externalChannelId == null ? null : externalChannelId, "availableCountries": availableCountries == null ? null : List.from(availableCountries.map((x) => x)), "isUnlisted": isUnlisted == null ? null : isUnlisted, "hasYpcMetadata": hasYpcMetadata == null ? null : hasYpcMetadata, "viewCount": viewCount == null ? null : viewCount, "category": category == null ? null : category, "publishDate": publishDate == null ? null : "${publishDate.year.toString().padLeft(4, '0')}-${publishDate.month.toString().padLeft(2, '0')}-${publishDate.day.toString().padLeft(2, '0')}", "ownerChannelName": ownerChannelName == null ? null : ownerChannelName, "uploadDate": uploadDate == null ? null : "${uploadDate.year.toString().padLeft(4, '0')}-${uploadDate.month.toString().padLeft(2, '0')}-${uploadDate.day.toString().padLeft(2, '0')}", "liveBroadcastDetails": liveBroadcastDetails == null ? null : liveBroadcastDetails.toJson(), }; } class Embed { Embed({ this.iframeUrl, this.flashUrl, this.width, this.height, this.flashSecureUrl, }); final String iframeUrl; final String flashUrl; final int width; final int height; final String flashSecureUrl; factory Embed.fromRawJson(String str) => Embed.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Embed.fromJson(Map json) => Embed( iframeUrl: json["iframeUrl"] == null ? null : json["iframeUrl"], flashUrl: json["flashUrl"] == null ? null : json["flashUrl"], width: json["width"] == null ? null : json["width"], height: json["height"] == null ? null : json["height"], flashSecureUrl: json["flashSecureUrl"] == null ? null : json["flashSecureUrl"], ); Map toJson() => { "iframeUrl": iframeUrl == null ? null : iframeUrl, "flashUrl": flashUrl == null ? null : flashUrl, "width": width == null ? null : width, "height": height == null ? null : height, "flashSecureUrl": flashSecureUrl == null ? null : flashSecureUrl, }; } class LiveBroadcastDetails { LiveBroadcastDetails({ this.isLiveNow, this.startTimestamp, }); final bool isLiveNow; final DateTime startTimestamp; factory LiveBroadcastDetails.fromRawJson(String str) => LiveBroadcastDetails.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory LiveBroadcastDetails.fromJson(Map json) => LiveBroadcastDetails( isLiveNow: json["isLiveNow"] == null ? null : json["isLiveNow"], startTimestamp: json["startTimestamp"] == null ? null : DateTime.parse(json["startTimestamp"]), ); Map toJson() => { "isLiveNow": isLiveNow == null ? null : isLiveNow, "startTimestamp": startTimestamp == null ? null : startTimestamp.toIso8601String(), }; } class PlayabilityStatus { PlayabilityStatus({ this.status, this.playableInEmbed, this.miniplayer, this.contextParams, this.liveStreamability, this.reason, }); final String status; final bool playableInEmbed; final Miniplayer miniplayer; final String contextParams; final LiveStreamability liveStreamability; final String reason; factory PlayabilityStatus.fromRawJson(String str) => PlayabilityStatus.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayabilityStatus.fromJson(Map json) => PlayabilityStatus( status: json["status"] == null ? null : json["status"], playableInEmbed: json["playableInEmbed"] == null ? null : json["playableInEmbed"], miniplayer: json["miniplayer"] == null ? null : Miniplayer.fromJson(json["miniplayer"]), contextParams: json["contextParams"] == null ? null : json["contextParams"], liveStreamability: json["liveStreamability"] == null ? null : LiveStreamability.fromJson(json["liveStreamability"]), reason: json["reason"] == null ? null : json["reason"], ); Map toJson() => { "status": status == null ? null : status, "playableInEmbed": playableInEmbed == null ? null : playableInEmbed, "miniplayer": miniplayer == null ? null : miniplayer.toJson(), "contextParams": contextParams == null ? null : contextParams, "liveStreamability": liveStreamability == null ? null : liveStreamability.toJson(), "reason": reason == null ? null : reason, }; } class LiveStreamability { LiveStreamability({ this.liveStreamabilityRenderer, }); final LiveStreamabilityRenderer liveStreamabilityRenderer; factory LiveStreamability.fromRawJson(String str) => LiveStreamability.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory LiveStreamability.fromJson(Map json) => LiveStreamability( liveStreamabilityRenderer: json["liveStreamabilityRenderer"] == null ? null : LiveStreamabilityRenderer.fromJson( json["liveStreamabilityRenderer"]), ); Map toJson() => { "liveStreamabilityRenderer": liveStreamabilityRenderer == null ? null : liveStreamabilityRenderer.toJson(), }; } class LiveStreamabilityRenderer { LiveStreamabilityRenderer({ this.videoId, this.pollDelayMs, }); final String videoId; final String pollDelayMs; factory LiveStreamabilityRenderer.fromRawJson(String str) => LiveStreamabilityRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory LiveStreamabilityRenderer.fromJson(Map json) => LiveStreamabilityRenderer( videoId: json["videoId"] == null ? null : json["videoId"], pollDelayMs: json["pollDelayMs"] == null ? null : json["pollDelayMs"], ); Map toJson() => { "videoId": videoId == null ? null : videoId, "pollDelayMs": pollDelayMs == null ? null : pollDelayMs, }; } class Miniplayer { Miniplayer({ this.miniplayerRenderer, }); final MiniplayerRenderer miniplayerRenderer; factory Miniplayer.fromRawJson(String str) => Miniplayer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Miniplayer.fromJson(Map json) => Miniplayer( miniplayerRenderer: json["miniplayerRenderer"] == null ? null : MiniplayerRenderer.fromJson(json["miniplayerRenderer"]), ); Map toJson() => { "miniplayerRenderer": miniplayerRenderer == null ? null : miniplayerRenderer.toJson(), }; } class MiniplayerRenderer { MiniplayerRenderer({ this.playbackMode, this.minimizedEndpoint, }); final String playbackMode; final MinimizedEndpoint minimizedEndpoint; factory MiniplayerRenderer.fromRawJson(String str) => MiniplayerRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MiniplayerRenderer.fromJson(Map json) => MiniplayerRenderer( playbackMode: json["playbackMode"] == null ? null : json["playbackMode"], minimizedEndpoint: json["minimizedEndpoint"] == null ? null : MinimizedEndpoint.fromJson(json["minimizedEndpoint"]), ); Map toJson() => { "playbackMode": playbackMode == null ? null : playbackMode, "minimizedEndpoint": minimizedEndpoint == null ? null : minimizedEndpoint.toJson(), }; } class MinimizedEndpoint { MinimizedEndpoint({ this.clickTrackingParams, this.openPopupAction, }); final String clickTrackingParams; final MinimizedEndpointOpenPopupAction openPopupAction; factory MinimizedEndpoint.fromRawJson(String str) => MinimizedEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MinimizedEndpoint.fromJson(Map json) => MinimizedEndpoint( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], openPopupAction: json["openPopupAction"] == null ? null : MinimizedEndpointOpenPopupAction.fromJson( json["openPopupAction"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "openPopupAction": openPopupAction == null ? null : openPopupAction.toJson(), }; } class MinimizedEndpointOpenPopupAction { MinimizedEndpointOpenPopupAction({ this.popup, this.popupType, }); final FluffyPopup popup; final String popupType; factory MinimizedEndpointOpenPopupAction.fromRawJson(String str) => MinimizedEndpointOpenPopupAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MinimizedEndpointOpenPopupAction.fromJson( Map json) => MinimizedEndpointOpenPopupAction( popup: json["popup"] == null ? null : FluffyPopup.fromJson(json["popup"]), popupType: json["popupType"] == null ? null : json["popupType"], ); Map toJson() => { "popup": popup == null ? null : popup.toJson(), "popupType": popupType == null ? null : popupType, }; } class FluffyPopup { FluffyPopup({ this.notificationActionRenderer, }); final NotificationActionRenderer notificationActionRenderer; factory FluffyPopup.fromRawJson(String str) => FluffyPopup.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FluffyPopup.fromJson(Map json) => FluffyPopup( notificationActionRenderer: json["notificationActionRenderer"] == null ? null : NotificationActionRenderer.fromJson( json["notificationActionRenderer"]), ); Map toJson() => { "notificationActionRenderer": notificationActionRenderer == null ? null : notificationActionRenderer.toJson(), }; } class NotificationActionRenderer { NotificationActionRenderer({ this.responseText, this.actionButton, this.trackingParams, }); final HeaderText responseText; final NotificationActionRendererActionButton actionButton; final String trackingParams; factory NotificationActionRenderer.fromRawJson(String str) => NotificationActionRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory NotificationActionRenderer.fromJson(Map json) => NotificationActionRenderer( responseText: json["responseText"] == null ? null : HeaderText.fromJson(json["responseText"]), actionButton: json["actionButton"] == null ? null : NotificationActionRendererActionButton.fromJson( json["actionButton"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], ); Map toJson() => { "responseText": responseText == null ? null : responseText.toJson(), "actionButton": actionButton == null ? null : actionButton.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, }; } class NotificationActionRendererActionButton { NotificationActionRendererActionButton({ this.buttonRenderer, }); final PurpleButtonRenderer buttonRenderer; factory NotificationActionRendererActionButton.fromRawJson(String str) => NotificationActionRendererActionButton.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory NotificationActionRendererActionButton.fromJson( Map json) => NotificationActionRendererActionButton( buttonRenderer: json["buttonRenderer"] == null ? null : PurpleButtonRenderer.fromJson(json["buttonRenderer"]), ); Map toJson() => { "buttonRenderer": buttonRenderer == null ? null : buttonRenderer.toJson(), }; } class PurpleButtonRenderer { PurpleButtonRenderer({ this.text, this.trackingParams, this.command, }); final HeaderText text; final String trackingParams; final NavigationEndpoint command; factory PurpleButtonRenderer.fromRawJson(String str) => PurpleButtonRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PurpleButtonRenderer.fromJson(Map json) => PurpleButtonRenderer( text: json["text"] == null ? null : HeaderText.fromJson(json["text"]), trackingParams: json["trackingParams"] == null ? null : json["trackingParams"], command: json["command"] == null ? null : NavigationEndpoint.fromJson(json["command"]), ); Map toJson() => { "text": text == null ? null : text.toJson(), "trackingParams": trackingParams == null ? null : trackingParams, "command": command == null ? null : command.toJson(), }; } class PlaybackTracking { PlaybackTracking({ this.videostatsPlaybackUrl, this.videostatsDelayplayUrl, this.videostatsWatchtimeUrl, this.ptrackingUrl, this.qoeUrl, this.setAwesomeUrl, this.atrUrl, this.youtubeRemarketingUrl, }); final PtrackingUrlClass videostatsPlaybackUrl; final AtrUrlClass videostatsDelayplayUrl; final PtrackingUrlClass videostatsWatchtimeUrl; final PtrackingUrlClass ptrackingUrl; final PtrackingUrlClass qoeUrl; final AtrUrlClass setAwesomeUrl; final AtrUrlClass atrUrl; final AtrUrlClass youtubeRemarketingUrl; factory PlaybackTracking.fromRawJson(String str) => PlaybackTracking.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlaybackTracking.fromJson(Map json) => PlaybackTracking( videostatsPlaybackUrl: json["videostatsPlaybackUrl"] == null ? null : PtrackingUrlClass.fromJson(json["videostatsPlaybackUrl"]), videostatsDelayplayUrl: json["videostatsDelayplayUrl"] == null ? null : AtrUrlClass.fromJson(json["videostatsDelayplayUrl"]), videostatsWatchtimeUrl: json["videostatsWatchtimeUrl"] == null ? null : PtrackingUrlClass.fromJson(json["videostatsWatchtimeUrl"]), ptrackingUrl: json["ptrackingUrl"] == null ? null : PtrackingUrlClass.fromJson(json["ptrackingUrl"]), qoeUrl: json["qoeUrl"] == null ? null : PtrackingUrlClass.fromJson(json["qoeUrl"]), setAwesomeUrl: json["setAwesomeUrl"] == null ? null : AtrUrlClass.fromJson(json["setAwesomeUrl"]), atrUrl: json["atrUrl"] == null ? null : AtrUrlClass.fromJson(json["atrUrl"]), youtubeRemarketingUrl: json["youtubeRemarketingUrl"] == null ? null : AtrUrlClass.fromJson(json["youtubeRemarketingUrl"]), ); Map toJson() => { "videostatsPlaybackUrl": videostatsPlaybackUrl == null ? null : videostatsPlaybackUrl.toJson(), "videostatsDelayplayUrl": videostatsDelayplayUrl == null ? null : videostatsDelayplayUrl.toJson(), "videostatsWatchtimeUrl": videostatsWatchtimeUrl == null ? null : videostatsWatchtimeUrl.toJson(), "ptrackingUrl": ptrackingUrl == null ? null : ptrackingUrl.toJson(), "qoeUrl": qoeUrl == null ? null : qoeUrl.toJson(), "setAwesomeUrl": setAwesomeUrl == null ? null : setAwesomeUrl.toJson(), "atrUrl": atrUrl == null ? null : atrUrl.toJson(), "youtubeRemarketingUrl": youtubeRemarketingUrl == null ? null : youtubeRemarketingUrl.toJson(), }; } class AtrUrlClass { AtrUrlClass({ this.baseUrl, this.elapsedMediaTimeSeconds, }); final String baseUrl; final int elapsedMediaTimeSeconds; factory AtrUrlClass.fromRawJson(String str) => AtrUrlClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AtrUrlClass.fromJson(Map json) => AtrUrlClass( baseUrl: json["baseUrl"] == null ? null : json["baseUrl"], elapsedMediaTimeSeconds: json["elapsedMediaTimeSeconds"] == null ? null : json["elapsedMediaTimeSeconds"], ); Map toJson() => { "baseUrl": baseUrl == null ? null : baseUrl, "elapsedMediaTimeSeconds": elapsedMediaTimeSeconds == null ? null : elapsedMediaTimeSeconds, }; } class PtrackingUrlClass { PtrackingUrlClass({ this.baseUrl, }); final String baseUrl; factory PtrackingUrlClass.fromRawJson(String str) => PtrackingUrlClass.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PtrackingUrlClass.fromJson(Map json) => PtrackingUrlClass( baseUrl: json["baseUrl"] == null ? null : json["baseUrl"], ); Map toJson() => { "baseUrl": baseUrl == null ? null : baseUrl, }; } class PlayerConfig { PlayerConfig({ this.audioConfig, this.streamSelectionConfig, this.daiConfig, this.mediaCommonConfig, this.webPlayerConfig, this.livePlayerConfig, }); final AudioConfig audioConfig; final StreamSelectionConfig streamSelectionConfig; final DaiConfig daiConfig; final MediaCommonConfig mediaCommonConfig; final WebPlayerConfig webPlayerConfig; final LivePlayerConfig livePlayerConfig; factory PlayerConfig.fromRawJson(String str) => PlayerConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerConfig.fromJson(Map json) => PlayerConfig( audioConfig: json["audioConfig"] == null ? null : AudioConfig.fromJson(json["audioConfig"]), streamSelectionConfig: json["streamSelectionConfig"] == null ? null : StreamSelectionConfig.fromJson(json["streamSelectionConfig"]), daiConfig: json["daiConfig"] == null ? null : DaiConfig.fromJson(json["daiConfig"]), mediaCommonConfig: json["mediaCommonConfig"] == null ? null : MediaCommonConfig.fromJson(json["mediaCommonConfig"]), webPlayerConfig: json["webPlayerConfig"] == null ? null : WebPlayerConfig.fromJson(json["webPlayerConfig"]), livePlayerConfig: json["livePlayerConfig"] == null ? null : LivePlayerConfig.fromJson(json["livePlayerConfig"]), ); Map toJson() => { "audioConfig": audioConfig == null ? null : audioConfig.toJson(), "streamSelectionConfig": streamSelectionConfig == null ? null : streamSelectionConfig.toJson(), "daiConfig": daiConfig == null ? null : daiConfig.toJson(), "mediaCommonConfig": mediaCommonConfig == null ? null : mediaCommonConfig.toJson(), "webPlayerConfig": webPlayerConfig == null ? null : webPlayerConfig.toJson(), "livePlayerConfig": livePlayerConfig == null ? null : livePlayerConfig.toJson(), }; } class AudioConfig { AudioConfig({ this.loudnessDb, this.perceptualLoudnessDb, this.enablePerFormatLoudness, }); final double loudnessDb; final double perceptualLoudnessDb; final bool enablePerFormatLoudness; factory AudioConfig.fromRawJson(String str) => AudioConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AudioConfig.fromJson(Map json) => AudioConfig( loudnessDb: json["loudnessDb"] == null ? null : json["loudnessDb"].toDouble(), perceptualLoudnessDb: json["perceptualLoudnessDb"] == null ? null : json["perceptualLoudnessDb"].toDouble(), enablePerFormatLoudness: json["enablePerFormatLoudness"] == null ? null : json["enablePerFormatLoudness"], ); Map toJson() => { "loudnessDb": loudnessDb == null ? null : loudnessDb, "perceptualLoudnessDb": perceptualLoudnessDb == null ? null : perceptualLoudnessDb, "enablePerFormatLoudness": enablePerFormatLoudness == null ? null : enablePerFormatLoudness, }; } class DaiConfig { DaiConfig({ this.enableServerStitchedDai, this.enableDai, }); final bool enableServerStitchedDai; final bool enableDai; factory DaiConfig.fromRawJson(String str) => DaiConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory DaiConfig.fromJson(Map json) => DaiConfig( enableServerStitchedDai: json["enableServerStitchedDai"] == null ? null : json["enableServerStitchedDai"], enableDai: json["enableDai"] == null ? null : json["enableDai"], ); Map toJson() => { "enableServerStitchedDai": enableServerStitchedDai == null ? null : enableServerStitchedDai, "enableDai": enableDai == null ? null : enableDai, }; } class LivePlayerConfig { LivePlayerConfig({ this.liveReadaheadSeconds, this.hasSubfragmentedFmp4, }); final double liveReadaheadSeconds; final bool hasSubfragmentedFmp4; factory LivePlayerConfig.fromRawJson(String str) => LivePlayerConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory LivePlayerConfig.fromJson(Map json) => LivePlayerConfig( liveReadaheadSeconds: json["liveReadaheadSeconds"] == null ? null : json["liveReadaheadSeconds"].toDouble(), hasSubfragmentedFmp4: json["hasSubfragmentedFmp4"] == null ? null : json["hasSubfragmentedFmp4"], ); Map toJson() => { "liveReadaheadSeconds": liveReadaheadSeconds == null ? null : liveReadaheadSeconds, "hasSubfragmentedFmp4": hasSubfragmentedFmp4 == null ? null : hasSubfragmentedFmp4, }; } class MediaCommonConfig { MediaCommonConfig({ this.dynamicReadaheadConfig, }); final DynamicReadaheadConfig dynamicReadaheadConfig; factory MediaCommonConfig.fromRawJson(String str) => MediaCommonConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory MediaCommonConfig.fromJson(Map json) => MediaCommonConfig( dynamicReadaheadConfig: json["dynamicReadaheadConfig"] == null ? null : DynamicReadaheadConfig.fromJson(json["dynamicReadaheadConfig"]), ); Map toJson() => { "dynamicReadaheadConfig": dynamicReadaheadConfig == null ? null : dynamicReadaheadConfig.toJson(), }; } class DynamicReadaheadConfig { DynamicReadaheadConfig({ this.maxReadAheadMediaTimeMs, this.minReadAheadMediaTimeMs, this.readAheadGrowthRateMs, }); final int maxReadAheadMediaTimeMs; final int minReadAheadMediaTimeMs; final int readAheadGrowthRateMs; factory DynamicReadaheadConfig.fromRawJson(String str) => DynamicReadaheadConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory DynamicReadaheadConfig.fromJson(Map json) => DynamicReadaheadConfig( maxReadAheadMediaTimeMs: json["maxReadAheadMediaTimeMs"] == null ? null : json["maxReadAheadMediaTimeMs"], minReadAheadMediaTimeMs: json["minReadAheadMediaTimeMs"] == null ? null : json["minReadAheadMediaTimeMs"], readAheadGrowthRateMs: json["readAheadGrowthRateMs"] == null ? null : json["readAheadGrowthRateMs"], ); Map toJson() => { "maxReadAheadMediaTimeMs": maxReadAheadMediaTimeMs == null ? null : maxReadAheadMediaTimeMs, "minReadAheadMediaTimeMs": minReadAheadMediaTimeMs == null ? null : minReadAheadMediaTimeMs, "readAheadGrowthRateMs": readAheadGrowthRateMs == null ? null : readAheadGrowthRateMs, }; } class StreamSelectionConfig { StreamSelectionConfig({ this.maxBitrate, }); final String maxBitrate; factory StreamSelectionConfig.fromRawJson(String str) => StreamSelectionConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory StreamSelectionConfig.fromJson(Map json) => StreamSelectionConfig( maxBitrate: json["maxBitrate"] == null ? null : json["maxBitrate"], ); Map toJson() => { "maxBitrate": maxBitrate == null ? null : maxBitrate, }; } class WebPlayerConfig { WebPlayerConfig({ this.webPlayerActionsPorting, }); final WebPlayerActionsPorting webPlayerActionsPorting; factory WebPlayerConfig.fromRawJson(String str) => WebPlayerConfig.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory WebPlayerConfig.fromJson(Map json) => WebPlayerConfig( webPlayerActionsPorting: json["webPlayerActionsPorting"] == null ? null : WebPlayerActionsPorting.fromJson(json["webPlayerActionsPorting"]), ); Map toJson() => { "webPlayerActionsPorting": webPlayerActionsPorting == null ? null : webPlayerActionsPorting.toJson(), }; } class WebPlayerActionsPorting { WebPlayerActionsPorting({ this.getSharePanelCommand, this.subscribeCommand, this.unsubscribeCommand, this.addToWatchLaterCommand, this.removeFromWatchLaterCommand, }); final GetSharePanelCommand getSharePanelCommand; final SubscribeCommand subscribeCommand; final UnsubscribeCommand unsubscribeCommand; final AddToWatchLaterCommand addToWatchLaterCommand; final RemoveFromWatchLaterCommand removeFromWatchLaterCommand; factory WebPlayerActionsPorting.fromRawJson(String str) => WebPlayerActionsPorting.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory WebPlayerActionsPorting.fromJson(Map json) => WebPlayerActionsPorting( getSharePanelCommand: json["getSharePanelCommand"] == null ? null : GetSharePanelCommand.fromJson(json["getSharePanelCommand"]), subscribeCommand: json["subscribeCommand"] == null ? null : SubscribeCommand.fromJson(json["subscribeCommand"]), unsubscribeCommand: json["unsubscribeCommand"] == null ? null : UnsubscribeCommand.fromJson(json["unsubscribeCommand"]), addToWatchLaterCommand: json["addToWatchLaterCommand"] == null ? null : AddToWatchLaterCommand.fromJson(json["addToWatchLaterCommand"]), removeFromWatchLaterCommand: json["removeFromWatchLaterCommand"] == null ? null : RemoveFromWatchLaterCommand.fromJson( json["removeFromWatchLaterCommand"]), ); Map toJson() => { "getSharePanelCommand": getSharePanelCommand == null ? null : getSharePanelCommand.toJson(), "subscribeCommand": subscribeCommand == null ? null : subscribeCommand.toJson(), "unsubscribeCommand": unsubscribeCommand == null ? null : unsubscribeCommand.toJson(), "addToWatchLaterCommand": addToWatchLaterCommand == null ? null : addToWatchLaterCommand.toJson(), "removeFromWatchLaterCommand": removeFromWatchLaterCommand == null ? null : removeFromWatchLaterCommand.toJson(), }; } class AddToWatchLaterCommand { AddToWatchLaterCommand({ this.clickTrackingParams, this.commandMetadata, this.playlistEditEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final AddToWatchLaterCommandPlaylistEditEndpoint playlistEditEndpoint; factory AddToWatchLaterCommand.fromRawJson(String str) => AddToWatchLaterCommand.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AddToWatchLaterCommand.fromJson(Map json) => AddToWatchLaterCommand( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), playlistEditEndpoint: json["playlistEditEndpoint"] == null ? null : AddToWatchLaterCommandPlaylistEditEndpoint.fromJson( json["playlistEditEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "playlistEditEndpoint": playlistEditEndpoint == null ? null : playlistEditEndpoint.toJson(), }; } class AddToWatchLaterCommandPlaylistEditEndpoint { AddToWatchLaterCommandPlaylistEditEndpoint({ this.playlistId, this.actions, }); final String playlistId; final List actions; factory AddToWatchLaterCommandPlaylistEditEndpoint.fromRawJson(String str) => AddToWatchLaterCommandPlaylistEditEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory AddToWatchLaterCommandPlaylistEditEndpoint.fromJson( Map json) => AddToWatchLaterCommandPlaylistEditEndpoint( playlistId: json["playlistId"] == null ? null : json["playlistId"], actions: json["actions"] == null ? null : List.from( json["actions"].map((x) => PurpleAction.fromJson(x))), ); Map toJson() => { "playlistId": playlistId == null ? null : playlistId, "actions": actions == null ? null : List.from(actions.map((x) => x.toJson())), }; } class PurpleAction { PurpleAction({ this.addedVideoId, this.action, }); final String addedVideoId; final String action; factory PurpleAction.fromRawJson(String str) => PurpleAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PurpleAction.fromJson(Map json) => PurpleAction( addedVideoId: json["addedVideoId"] == null ? null : json["addedVideoId"], action: json["action"] == null ? null : json["action"], ); Map toJson() => { "addedVideoId": addedVideoId == null ? null : addedVideoId, "action": action == null ? null : action, }; } class GetSharePanelCommand { GetSharePanelCommand({ this.clickTrackingParams, this.commandMetadata, this.webPlayerShareEntityServiceEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final WebPlayerShareEntityServiceEndpoint webPlayerShareEntityServiceEndpoint; factory GetSharePanelCommand.fromRawJson(String str) => GetSharePanelCommand.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory GetSharePanelCommand.fromJson(Map json) => GetSharePanelCommand( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), webPlayerShareEntityServiceEndpoint: json["webPlayerShareEntityServiceEndpoint"] == null ? null : WebPlayerShareEntityServiceEndpoint.fromJson( json["webPlayerShareEntityServiceEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "webPlayerShareEntityServiceEndpoint": webPlayerShareEntityServiceEndpoint == null ? null : webPlayerShareEntityServiceEndpoint.toJson(), }; } class WebPlayerShareEntityServiceEndpoint { WebPlayerShareEntityServiceEndpoint({ this.serializedShareEntity, }); final String serializedShareEntity; factory WebPlayerShareEntityServiceEndpoint.fromRawJson(String str) => WebPlayerShareEntityServiceEndpoint.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory WebPlayerShareEntityServiceEndpoint.fromJson( Map json) => WebPlayerShareEntityServiceEndpoint( serializedShareEntity: json["serializedShareEntity"] == null ? null : json["serializedShareEntity"], ); Map toJson() => { "serializedShareEntity": serializedShareEntity == null ? null : serializedShareEntity, }; } class RemoveFromWatchLaterCommand { RemoveFromWatchLaterCommand({ this.clickTrackingParams, this.commandMetadata, this.playlistEditEndpoint, }); final String clickTrackingParams; final SubscribeCommandCommandMetadata commandMetadata; final RemoveFromWatchLaterCommandPlaylistEditEndpoint playlistEditEndpoint; factory RemoveFromWatchLaterCommand.fromRawJson(String str) => RemoveFromWatchLaterCommand.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory RemoveFromWatchLaterCommand.fromJson(Map json) => RemoveFromWatchLaterCommand( clickTrackingParams: json["clickTrackingParams"] == null ? null : json["clickTrackingParams"], commandMetadata: json["commandMetadata"] == null ? null : SubscribeCommandCommandMetadata.fromJson(json["commandMetadata"]), playlistEditEndpoint: json["playlistEditEndpoint"] == null ? null : RemoveFromWatchLaterCommandPlaylistEditEndpoint.fromJson( json["playlistEditEndpoint"]), ); Map toJson() => { "clickTrackingParams": clickTrackingParams == null ? null : clickTrackingParams, "commandMetadata": commandMetadata == null ? null : commandMetadata.toJson(), "playlistEditEndpoint": playlistEditEndpoint == null ? null : playlistEditEndpoint.toJson(), }; } class RemoveFromWatchLaterCommandPlaylistEditEndpoint { RemoveFromWatchLaterCommandPlaylistEditEndpoint({ this.playlistId, this.actions, }); final String playlistId; final List actions; factory RemoveFromWatchLaterCommandPlaylistEditEndpoint.fromRawJson( String str) => RemoveFromWatchLaterCommandPlaylistEditEndpoint.fromJson( json.decode(str)); String toRawJson() => json.encode(toJson()); factory RemoveFromWatchLaterCommandPlaylistEditEndpoint.fromJson( Map json) => RemoveFromWatchLaterCommandPlaylistEditEndpoint( playlistId: json["playlistId"] == null ? null : json["playlistId"], actions: json["actions"] == null ? null : List.from( json["actions"].map((x) => FluffyAction.fromJson(x))), ); Map toJson() => { "playlistId": playlistId == null ? null : playlistId, "actions": actions == null ? null : List.from(actions.map((x) => x.toJson())), }; } class FluffyAction { FluffyAction({ this.action, this.removedVideoId, }); final String action; final String removedVideoId; factory FluffyAction.fromRawJson(String str) => FluffyAction.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FluffyAction.fromJson(Map json) => FluffyAction( action: json["action"] == null ? null : json["action"], removedVideoId: json["removedVideoId"] == null ? null : json["removedVideoId"], ); Map toJson() => { "action": action == null ? null : action, "removedVideoId": removedVideoId == null ? null : removedVideoId, }; } class ResponseContext { ResponseContext({ this.serviceTrackingParams, this.webResponseContextExtensionData, }); final List serviceTrackingParams; final WebResponseContextExtensionData webResponseContextExtensionData; factory ResponseContext.fromRawJson(String str) => ResponseContext.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ResponseContext.fromJson(Map json) => ResponseContext( serviceTrackingParams: json["serviceTrackingParams"] == null ? null : List.from(json["serviceTrackingParams"] .map((x) => ServiceTrackingParam.fromJson(x))), webResponseContextExtensionData: json["webResponseContextExtensionData"] == null ? null : WebResponseContextExtensionData.fromJson( json["webResponseContextExtensionData"]), ); Map toJson() => { "serviceTrackingParams": serviceTrackingParams == null ? null : List.from(serviceTrackingParams.map((x) => x.toJson())), "webResponseContextExtensionData": webResponseContextExtensionData == null ? null : webResponseContextExtensionData.toJson(), }; } class ServiceTrackingParam { ServiceTrackingParam({ this.service, this.params, }); final String service; final List params; factory ServiceTrackingParam.fromRawJson(String str) => ServiceTrackingParam.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ServiceTrackingParam.fromJson(Map json) => ServiceTrackingParam( service: json["service"] == null ? null : json["service"], params: json["params"] == null ? null : List.from(json["params"].map((x) => Param.fromJson(x))), ); Map toJson() => { "service": service == null ? null : service, "params": params == null ? null : List.from(params.map((x) => x.toJson())), }; } class Param { Param({ this.key, this.value, }); final String key; final String value; factory Param.fromRawJson(String str) => Param.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Param.fromJson(Map json) => Param( key: json["key"] == null ? null : json["key"], value: json["value"] == null ? null : json["value"], ); Map toJson() => { "key": key == null ? null : key, "value": value == null ? null : value, }; } class WebResponseContextExtensionData { WebResponseContextExtensionData({ this.hasDecorated, }); final bool hasDecorated; factory WebResponseContextExtensionData.fromRawJson(String str) => WebResponseContextExtensionData.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory WebResponseContextExtensionData.fromJson(Map json) => WebResponseContextExtensionData( hasDecorated: json["hasDecorated"] == null ? null : json["hasDecorated"], ); Map toJson() => { "hasDecorated": hasDecorated == null ? null : hasDecorated, }; } class Storyboards { Storyboards({ this.playerStoryboardSpecRenderer, this.playerLiveStoryboardSpecRenderer, }); final PlayerStoryboardSpecRenderer playerStoryboardSpecRenderer; final PlayerStoryboardSpecRenderer playerLiveStoryboardSpecRenderer; factory Storyboards.fromRawJson(String str) => Storyboards.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Storyboards.fromJson(Map json) => Storyboards( playerStoryboardSpecRenderer: json["playerStoryboardSpecRenderer"] == null ? null : PlayerStoryboardSpecRenderer.fromJson( json["playerStoryboardSpecRenderer"]), playerLiveStoryboardSpecRenderer: json["playerLiveStoryboardSpecRenderer"] == null ? null : PlayerStoryboardSpecRenderer.fromJson( json["playerLiveStoryboardSpecRenderer"]), ); Map toJson() => { "playerStoryboardSpecRenderer": playerStoryboardSpecRenderer == null ? null : playerStoryboardSpecRenderer.toJson(), "playerLiveStoryboardSpecRenderer": playerLiveStoryboardSpecRenderer == null ? null : playerLiveStoryboardSpecRenderer.toJson(), }; } class PlayerStoryboardSpecRenderer { PlayerStoryboardSpecRenderer({ this.spec, }); final String spec; factory PlayerStoryboardSpecRenderer.fromRawJson(String str) => PlayerStoryboardSpecRenderer.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory PlayerStoryboardSpecRenderer.fromJson(Map json) => PlayerStoryboardSpecRenderer( spec: json["spec"] == null ? null : json["spec"], ); Map toJson() => { "spec": spec == null ? null : spec, }; } class StreamingData { StreamingData({ this.expiresInSeconds, this.formats, this.adaptiveFormats, this.dashManifestUrl, this.hlsManifestUrl, }); final String expiresInSeconds; final List formats; final List adaptiveFormats; final String dashManifestUrl; final String hlsManifestUrl; factory StreamingData.fromRawJson(String str) => StreamingData.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory StreamingData.fromJson(Map json) => StreamingData( expiresInSeconds: json["expiresInSeconds"] == null ? null : json["expiresInSeconds"], formats: json["formats"] == null ? null : List.from(json["formats"].map((x) => Format.fromJson(x))), adaptiveFormats: json["adaptiveFormats"] == null ? null : List.from( json["adaptiveFormats"].map((x) => Format.fromJson(x))), dashManifestUrl: json["dashManifestUrl"] == null ? null : json["dashManifestUrl"], hlsManifestUrl: json["hlsManifestUrl"] == null ? null : json["hlsManifestUrl"], ); Map toJson() => { "expiresInSeconds": expiresInSeconds == null ? null : expiresInSeconds, "formats": formats == null ? null : List.from(formats.map((x) => x.toJson())), "adaptiveFormats": adaptiveFormats == null ? null : List.from(adaptiveFormats.map((x) => x.toJson())), "dashManifestUrl": dashManifestUrl == null ? null : dashManifestUrl, "hlsManifestUrl": hlsManifestUrl == null ? null : hlsManifestUrl, }; } class Format { Format({ this.itag, this.mimeType, this.bitrate, this.width, this.height, this.initRange, this.indexRange, this.lastModified, this.contentLength, this.quality, this.fps, this.qualityLabel, this.projectionType, this.averageBitrate, this.approxDurationMs, this.signatureCipher, this.url, this.cipher, this.colorInfo, this.highReplication, this.audioQuality, this.audioSampleRate, this.audioChannels, }); final int itag; final String mimeType; final int bitrate; final int width; final int height; final Range initRange; final Range indexRange; final String lastModified; final String contentLength; final String quality; final int fps; final String qualityLabel; final ProjectionType projectionType; final int averageBitrate; final String approxDurationMs; final String signatureCipher; final String cipher; final String url; final ColorInfo colorInfo; final bool highReplication; final String audioQuality; final String audioSampleRate; final int audioChannels; factory Format.fromRawJson(String str) => Format.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Format.fromJson(Map json) => Format( itag: json["itag"] == null ? null : json["itag"], mimeType: json["mimeType"] == null ? null : json["mimeType"], bitrate: json["bitrate"] == null ? null : json["bitrate"], width: json["width"] == null ? null : json["width"], height: json["height"] == null ? null : json["height"], initRange: json["initRange"] == null ? null : Range.fromJson(json["initRange"]), indexRange: json["indexRange"] == null ? null : Range.fromJson(json["indexRange"]), lastModified: json["lastModified"] == null ? null : json["lastModified"], contentLength: json["contentLength"] == null ? null : json["contentLength"], quality: json["quality"] == null ? null : json["quality"], fps: json["fps"] == null ? null : json["fps"], qualityLabel: json["qualityLabel"] == null ? null : json["qualityLabel"], projectionType: json["projectionType"] == null ? null : projectionTypeValues.map[json["projectionType"]], averageBitrate: json["averageBitrate"] == null ? null : json["averageBitrate"], approxDurationMs: json["approxDurationMs"] == null ? null : json["approxDurationMs"], signatureCipher: json["signatureCipher"] == null ? null : json["signatureCipher"], cipher: json["cipher"] == null ? null : json["cipher"], url: json["url"] == null ? null : json["url"], colorInfo: json["colorInfo"] == null ? null : ColorInfo.fromJson(json["colorInfo"]), highReplication: json["highReplication"] == null ? null : json["highReplication"], audioQuality: json["audioQuality"] == null ? null : json["audioQuality"], audioSampleRate: json["audioSampleRate"] == null ? null : json["audioSampleRate"], audioChannels: json["audioChannels"] == null ? null : json["audioChannels"], ); Map toJson() => { "itag": itag == null ? null : itag, "mimeType": mimeType == null ? null : mimeType, "bitrate": bitrate == null ? null : bitrate, "width": width == null ? null : width, "height": height == null ? null : height, "initRange": initRange == null ? null : initRange.toJson(), "indexRange": indexRange == null ? null : indexRange.toJson(), "lastModified": lastModified == null ? null : lastModified, "contentLength": contentLength == null ? null : contentLength, "quality": quality == null ? null : quality, "fps": fps == null ? null : fps, "qualityLabel": qualityLabel == null ? null : qualityLabel, "projectionType": projectionType == null ? null : projectionTypeValues.reverse[projectionType], "averageBitrate": averageBitrate == null ? null : averageBitrate, "approxDurationMs": approxDurationMs == null ? null : approxDurationMs, "signatureCipher": signatureCipher == null ? null : signatureCipher, "url": url == null ? null : url, "cipher": cipher == null ? null : cipher, "colorInfo": colorInfo == null ? null : colorInfo.toJson(), "highReplication": highReplication == null ? null : highReplication, "audioQuality": audioQuality == null ? null : audioQuality, "audioSampleRate": audioSampleRate == null ? null : audioSampleRate, "audioChannels": audioChannels == null ? null : audioChannels, }; } class ColorInfo { ColorInfo({ this.primaries, this.transferCharacteristics, this.matrixCoefficients, }); final Primaries primaries; final TransferCharacteristics transferCharacteristics; final MatrixCoefficients matrixCoefficients; factory ColorInfo.fromRawJson(String str) => ColorInfo.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory ColorInfo.fromJson(Map json) => ColorInfo( primaries: json["primaries"] == null ? null : primariesValues.map[json["primaries"]], transferCharacteristics: json["transferCharacteristics"] == null ? null : transferCharacteristicsValues .map[json["transferCharacteristics"]], matrixCoefficients: json["matrixCoefficients"] == null ? null : matrixCoefficientsValues.map[json["matrixCoefficients"]], ); Map toJson() => { "primaries": primaries == null ? null : primariesValues.reverse[primaries], "transferCharacteristics": transferCharacteristics == null ? null : transferCharacteristicsValues.reverse[transferCharacteristics], "matrixCoefficients": matrixCoefficients == null ? null : matrixCoefficientsValues.reverse[matrixCoefficients], }; } enum MatrixCoefficients { COLOR_MATRIX_COEFFICIENTS_BT709 } final matrixCoefficientsValues = EnumValues({ "COLOR_MATRIX_COEFFICIENTS_BT709": MatrixCoefficients.COLOR_MATRIX_COEFFICIENTS_BT709 }); enum Primaries { COLOR_PRIMARIES_BT709 } final primariesValues = EnumValues({"COLOR_PRIMARIES_BT709": Primaries.COLOR_PRIMARIES_BT709}); enum TransferCharacteristics { COLOR_TRANSFER_CHARACTERISTICS_BT709 } final transferCharacteristicsValues = EnumValues({ "COLOR_TRANSFER_CHARACTERISTICS_BT709": TransferCharacteristics.COLOR_TRANSFER_CHARACTERISTICS_BT709 }); class Range { Range({ this.start, this.end, }); final String start; final String end; factory Range.fromRawJson(String str) => Range.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory Range.fromJson(Map json) => Range( start: json["start"] == null ? null : json["start"], end: json["end"] == null ? null : json["end"], ); Map toJson() => { "start": start == null ? null : start, "end": end == null ? null : end, }; } enum ProjectionType { RECTANGULAR } final projectionTypeValues = EnumValues({"RECTANGULAR": ProjectionType.RECTANGULAR}); class VideoDetails { VideoDetails({ this.videoId, this.title, this.lengthSeconds, this.keywords, this.channelId, this.isOwnerViewing, this.shortDescription, this.isCrawlable, this.thumbnail, this.averageRating, this.allowRatings, this.viewCount, this.author, this.isPrivate, this.isUnpluggedCorpus, this.isLiveContent, this.isLive, this.isLiveDvrEnabled, this.liveChunkReadahead, this.isLiveDefaultBroadcast, this.isLowLatencyLiveStream, this.latencyClass, }); final String videoId; final String title; final String lengthSeconds; final List keywords; final String channelId; final bool isOwnerViewing; final String shortDescription; final bool isCrawlable; final IconClass thumbnail; final double averageRating; final bool allowRatings; final String viewCount; final String author; final bool isPrivate; final bool isUnpluggedCorpus; final bool isLiveContent; final bool isLive; final bool isLiveDvrEnabled; final int liveChunkReadahead; final bool isLiveDefaultBroadcast; final bool isLowLatencyLiveStream; final String latencyClass; factory VideoDetails.fromRawJson(String str) => VideoDetails.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory VideoDetails.fromJson(Map json) => VideoDetails( videoId: json["videoId"] == null ? null : json["videoId"], title: json["title"] == null ? null : json["title"], lengthSeconds: json["lengthSeconds"] == null ? null : json["lengthSeconds"], keywords: json["keywords"] == null ? null : List.from(json["keywords"].map((x) => x)), channelId: json["channelId"] == null ? null : json["channelId"], isOwnerViewing: json["isOwnerViewing"] == null ? null : json["isOwnerViewing"], shortDescription: json["shortDescription"] == null ? null : json["shortDescription"], isCrawlable: json["isCrawlable"] == null ? null : json["isCrawlable"], thumbnail: json["thumbnail"] == null ? null : IconClass.fromJson(json["thumbnail"]), averageRating: json["averageRating"] == null ? null : json["averageRating"].toDouble(), allowRatings: json["allowRatings"] == null ? null : json["allowRatings"], viewCount: json["viewCount"] == null ? null : json["viewCount"], author: json["author"] == null ? null : json["author"], isPrivate: json["isPrivate"] == null ? null : json["isPrivate"], isUnpluggedCorpus: json["isUnpluggedCorpus"] == null ? null : json["isUnpluggedCorpus"], isLiveContent: json["isLiveContent"] == null ? null : json["isLiveContent"], isLive: json["isLive"] == null ? null : json["isLive"], isLiveDvrEnabled: json["isLiveDvrEnabled"] == null ? null : json["isLiveDvrEnabled"], liveChunkReadahead: json["liveChunkReadahead"] == null ? null : json["liveChunkReadahead"], isLiveDefaultBroadcast: json["isLiveDefaultBroadcast"] == null ? null : json["isLiveDefaultBroadcast"], isLowLatencyLiveStream: json["isLowLatencyLiveStream"] == null ? null : json["isLowLatencyLiveStream"], latencyClass: json["latencyClass"] == null ? null : json["latencyClass"], ); Map toJson() => { "videoId": videoId == null ? null : videoId, "title": title == null ? null : title, "lengthSeconds": lengthSeconds == null ? null : lengthSeconds, "keywords": keywords == null ? null : List.from(keywords.map((x) => x)), "channelId": channelId == null ? null : channelId, "isOwnerViewing": isOwnerViewing == null ? null : isOwnerViewing, "shortDescription": shortDescription == null ? null : shortDescription, "isCrawlable": isCrawlable == null ? null : isCrawlable, "thumbnail": thumbnail == null ? null : thumbnail.toJson(), "averageRating": averageRating == null ? null : averageRating, "allowRatings": allowRatings == null ? null : allowRatings, "viewCount": viewCount == null ? null : viewCount, "author": author == null ? null : author, "isPrivate": isPrivate == null ? null : isPrivate, "isUnpluggedCorpus": isUnpluggedCorpus == null ? null : isUnpluggedCorpus, "isLiveContent": isLiveContent == null ? null : isLiveContent, "isLive": isLive == null ? null : isLive, "isLiveDvrEnabled": isLiveDvrEnabled == null ? null : isLiveDvrEnabled, "liveChunkReadahead": liveChunkReadahead == null ? null : liveChunkReadahead, "isLiveDefaultBroadcast": isLiveDefaultBroadcast == null ? null : isLiveDefaultBroadcast, "isLowLatencyLiveStream": isLowLatencyLiveStream == null ? null : isLowLatencyLiveStream, "latencyClass": latencyClass == null ? null : latencyClass, }; } class EnumValues { Map map; Map reverseMap; EnumValues(this.map); Map get reverse { if (reverseMap == null) { reverseMap = map.map((k, v) => new MapEntry(v, k)); } return reverseMap; } }