/* 
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

package dev.plexapi.sdk.models.operations;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.plexapi.sdk.utils.Utils;
import java.lang.Boolean;
import java.lang.Long;
import java.lang.Override;
import java.lang.String;
import java.lang.SuppressWarnings;
import java.util.List;
import java.util.Objects;
import java.util.Optional;


public class GetMediaProvidersMediaContainer {

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("size")
    private Optional<Long> size;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowCameraUpload")
    private Optional<Boolean> allowCameraUpload;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowChannelAccess")
    private Optional<Boolean> allowChannelAccess;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowSharing")
    private Optional<Boolean> allowSharing;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowSync")
    private Optional<Boolean> allowSync;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowTuners")
    private Optional<Boolean> allowTuners;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("backgroundProcessing")
    private Optional<Boolean> backgroundProcessing;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("certificate")
    private Optional<Boolean> certificate;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("companionProxy")
    private Optional<Boolean> companionProxy;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("countryCode")
    private Optional<String> countryCode;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("diagnostics")
    private Optional<String> diagnostics;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("eventStream")
    private Optional<Boolean> eventStream;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("friendlyName")
    private Optional<String> friendlyName;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("livetv")
    private Optional<Long> livetv;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("machineIdentifier")
    private Optional<String> machineIdentifier;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("musicAnalysis")
    private Optional<Long> musicAnalysis;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("myPlex")
    private Optional<Boolean> myPlex;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("myPlexMappingState")
    private Optional<String> myPlexMappingState;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("myPlexSigninState")
    private Optional<String> myPlexSigninState;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("myPlexSubscription")
    private Optional<Boolean> myPlexSubscription;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("myPlexUsername")
    private Optional<String> myPlexUsername;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("offlineTranscode")
    private Optional<Long> offlineTranscode;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("ownerFeatures")
    private Optional<String> ownerFeatures;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("platform")
    private Optional<String> platform;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("platformVersion")
    private Optional<String> platformVersion;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("pluginHost")
    private Optional<Boolean> pluginHost;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("pushNotifications")
    private Optional<Boolean> pushNotifications;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("readOnlyLibraries")
    private Optional<Boolean> readOnlyLibraries;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("streamingBrainABRVersion")
    private Optional<Long> streamingBrainABRVersion;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("streamingBrainVersion")
    private Optional<Long> streamingBrainVersion;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("sync")
    private Optional<Boolean> sync;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderActiveVideoSessions")
    private Optional<Long> transcoderActiveVideoSessions;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderAudio")
    private Optional<Boolean> transcoderAudio;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderLyrics")
    private Optional<Boolean> transcoderLyrics;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderSubtitles")
    private Optional<Boolean> transcoderSubtitles;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderVideo")
    private Optional<Boolean> transcoderVideo;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderVideoBitrates")
    private Optional<String> transcoderVideoBitrates;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderVideoQualities")
    private Optional<String> transcoderVideoQualities;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("transcoderVideoResolutions")
    private Optional<String> transcoderVideoResolutions;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("updatedAt")
    private Optional<Long> updatedAt;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("updater")
    private Optional<Boolean> updater;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("version")
    private Optional<String> version;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("voiceSearch")
    private Optional<Boolean> voiceSearch;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("MediaProvider")
    private Optional<? extends List<MediaProvider>> mediaProvider;

    @JsonCreator
    public GetMediaProvidersMediaContainer(
            @JsonProperty("size") Optional<Long> size,
            @JsonProperty("allowCameraUpload") Optional<Boolean> allowCameraUpload,
            @JsonProperty("allowChannelAccess") Optional<Boolean> allowChannelAccess,
            @JsonProperty("allowSharing") Optional<Boolean> allowSharing,
            @JsonProperty("allowSync") Optional<Boolean> allowSync,
            @JsonProperty("allowTuners") Optional<Boolean> allowTuners,
            @JsonProperty("backgroundProcessing") Optional<Boolean> backgroundProcessing,
            @JsonProperty("certificate") Optional<Boolean> certificate,
            @JsonProperty("companionProxy") Optional<Boolean> companionProxy,
            @JsonProperty("countryCode") Optional<String> countryCode,
            @JsonProperty("diagnostics") Optional<String> diagnostics,
            @JsonProperty("eventStream") Optional<Boolean> eventStream,
            @JsonProperty("friendlyName") Optional<String> friendlyName,
            @JsonProperty("livetv") Optional<Long> livetv,
            @JsonProperty("machineIdentifier") Optional<String> machineIdentifier,
            @JsonProperty("musicAnalysis") Optional<Long> musicAnalysis,
            @JsonProperty("myPlex") Optional<Boolean> myPlex,
            @JsonProperty("myPlexMappingState") Optional<String> myPlexMappingState,
            @JsonProperty("myPlexSigninState") Optional<String> myPlexSigninState,
            @JsonProperty("myPlexSubscription") Optional<Boolean> myPlexSubscription,
            @JsonProperty("myPlexUsername") Optional<String> myPlexUsername,
            @JsonProperty("offlineTranscode") Optional<Long> offlineTranscode,
            @JsonProperty("ownerFeatures") Optional<String> ownerFeatures,
            @JsonProperty("platform") Optional<String> platform,
            @JsonProperty("platformVersion") Optional<String> platformVersion,
            @JsonProperty("pluginHost") Optional<Boolean> pluginHost,
            @JsonProperty("pushNotifications") Optional<Boolean> pushNotifications,
            @JsonProperty("readOnlyLibraries") Optional<Boolean> readOnlyLibraries,
            @JsonProperty("streamingBrainABRVersion") Optional<Long> streamingBrainABRVersion,
            @JsonProperty("streamingBrainVersion") Optional<Long> streamingBrainVersion,
            @JsonProperty("sync") Optional<Boolean> sync,
            @JsonProperty("transcoderActiveVideoSessions") Optional<Long> transcoderActiveVideoSessions,
            @JsonProperty("transcoderAudio") Optional<Boolean> transcoderAudio,
            @JsonProperty("transcoderLyrics") Optional<Boolean> transcoderLyrics,
            @JsonProperty("transcoderSubtitles") Optional<Boolean> transcoderSubtitles,
            @JsonProperty("transcoderVideo") Optional<Boolean> transcoderVideo,
            @JsonProperty("transcoderVideoBitrates") Optional<String> transcoderVideoBitrates,
            @JsonProperty("transcoderVideoQualities") Optional<String> transcoderVideoQualities,
            @JsonProperty("transcoderVideoResolutions") Optional<String> transcoderVideoResolutions,
            @JsonProperty("updatedAt") Optional<Long> updatedAt,
            @JsonProperty("updater") Optional<Boolean> updater,
            @JsonProperty("version") Optional<String> version,
            @JsonProperty("voiceSearch") Optional<Boolean> voiceSearch,
            @JsonProperty("MediaProvider") Optional<? extends List<MediaProvider>> mediaProvider) {
        Utils.checkNotNull(size, "size");
        Utils.checkNotNull(allowCameraUpload, "allowCameraUpload");
        Utils.checkNotNull(allowChannelAccess, "allowChannelAccess");
        Utils.checkNotNull(allowSharing, "allowSharing");
        Utils.checkNotNull(allowSync, "allowSync");
        Utils.checkNotNull(allowTuners, "allowTuners");
        Utils.checkNotNull(backgroundProcessing, "backgroundProcessing");
        Utils.checkNotNull(certificate, "certificate");
        Utils.checkNotNull(companionProxy, "companionProxy");
        Utils.checkNotNull(countryCode, "countryCode");
        Utils.checkNotNull(diagnostics, "diagnostics");
        Utils.checkNotNull(eventStream, "eventStream");
        Utils.checkNotNull(friendlyName, "friendlyName");
        Utils.checkNotNull(livetv, "livetv");
        Utils.checkNotNull(machineIdentifier, "machineIdentifier");
        Utils.checkNotNull(musicAnalysis, "musicAnalysis");
        Utils.checkNotNull(myPlex, "myPlex");
        Utils.checkNotNull(myPlexMappingState, "myPlexMappingState");
        Utils.checkNotNull(myPlexSigninState, "myPlexSigninState");
        Utils.checkNotNull(myPlexSubscription, "myPlexSubscription");
        Utils.checkNotNull(myPlexUsername, "myPlexUsername");
        Utils.checkNotNull(offlineTranscode, "offlineTranscode");
        Utils.checkNotNull(ownerFeatures, "ownerFeatures");
        Utils.checkNotNull(platform, "platform");
        Utils.checkNotNull(platformVersion, "platformVersion");
        Utils.checkNotNull(pluginHost, "pluginHost");
        Utils.checkNotNull(pushNotifications, "pushNotifications");
        Utils.checkNotNull(readOnlyLibraries, "readOnlyLibraries");
        Utils.checkNotNull(streamingBrainABRVersion, "streamingBrainABRVersion");
        Utils.checkNotNull(streamingBrainVersion, "streamingBrainVersion");
        Utils.checkNotNull(sync, "sync");
        Utils.checkNotNull(transcoderActiveVideoSessions, "transcoderActiveVideoSessions");
        Utils.checkNotNull(transcoderAudio, "transcoderAudio");
        Utils.checkNotNull(transcoderLyrics, "transcoderLyrics");
        Utils.checkNotNull(transcoderSubtitles, "transcoderSubtitles");
        Utils.checkNotNull(transcoderVideo, "transcoderVideo");
        Utils.checkNotNull(transcoderVideoBitrates, "transcoderVideoBitrates");
        Utils.checkNotNull(transcoderVideoQualities, "transcoderVideoQualities");
        Utils.checkNotNull(transcoderVideoResolutions, "transcoderVideoResolutions");
        Utils.checkNotNull(updatedAt, "updatedAt");
        Utils.checkNotNull(updater, "updater");
        Utils.checkNotNull(version, "version");
        Utils.checkNotNull(voiceSearch, "voiceSearch");
        Utils.checkNotNull(mediaProvider, "mediaProvider");
        this.size = size;
        this.allowCameraUpload = allowCameraUpload;
        this.allowChannelAccess = allowChannelAccess;
        this.allowSharing = allowSharing;
        this.allowSync = allowSync;
        this.allowTuners = allowTuners;
        this.backgroundProcessing = backgroundProcessing;
        this.certificate = certificate;
        this.companionProxy = companionProxy;
        this.countryCode = countryCode;
        this.diagnostics = diagnostics;
        this.eventStream = eventStream;
        this.friendlyName = friendlyName;
        this.livetv = livetv;
        this.machineIdentifier = machineIdentifier;
        this.musicAnalysis = musicAnalysis;
        this.myPlex = myPlex;
        this.myPlexMappingState = myPlexMappingState;
        this.myPlexSigninState = myPlexSigninState;
        this.myPlexSubscription = myPlexSubscription;
        this.myPlexUsername = myPlexUsername;
        this.offlineTranscode = offlineTranscode;
        this.ownerFeatures = ownerFeatures;
        this.platform = platform;
        this.platformVersion = platformVersion;
        this.pluginHost = pluginHost;
        this.pushNotifications = pushNotifications;
        this.readOnlyLibraries = readOnlyLibraries;
        this.streamingBrainABRVersion = streamingBrainABRVersion;
        this.streamingBrainVersion = streamingBrainVersion;
        this.sync = sync;
        this.transcoderActiveVideoSessions = transcoderActiveVideoSessions;
        this.transcoderAudio = transcoderAudio;
        this.transcoderLyrics = transcoderLyrics;
        this.transcoderSubtitles = transcoderSubtitles;
        this.transcoderVideo = transcoderVideo;
        this.transcoderVideoBitrates = transcoderVideoBitrates;
        this.transcoderVideoQualities = transcoderVideoQualities;
        this.transcoderVideoResolutions = transcoderVideoResolutions;
        this.updatedAt = updatedAt;
        this.updater = updater;
        this.version = version;
        this.voiceSearch = voiceSearch;
        this.mediaProvider = mediaProvider;
    }
    
    public GetMediaProvidersMediaContainer() {
        this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
    }

    @JsonIgnore
    public Optional<Long> size() {
        return size;
    }

    @JsonIgnore
    public Optional<Boolean> allowCameraUpload() {
        return allowCameraUpload;
    }

    @JsonIgnore
    public Optional<Boolean> allowChannelAccess() {
        return allowChannelAccess;
    }

    @JsonIgnore
    public Optional<Boolean> allowSharing() {
        return allowSharing;
    }

    @JsonIgnore
    public Optional<Boolean> allowSync() {
        return allowSync;
    }

    @JsonIgnore
    public Optional<Boolean> allowTuners() {
        return allowTuners;
    }

    @JsonIgnore
    public Optional<Boolean> backgroundProcessing() {
        return backgroundProcessing;
    }

    @JsonIgnore
    public Optional<Boolean> certificate() {
        return certificate;
    }

    @JsonIgnore
    public Optional<Boolean> companionProxy() {
        return companionProxy;
    }

    @JsonIgnore
    public Optional<String> countryCode() {
        return countryCode;
    }

    @JsonIgnore
    public Optional<String> diagnostics() {
        return diagnostics;
    }

    @JsonIgnore
    public Optional<Boolean> eventStream() {
        return eventStream;
    }

    @JsonIgnore
    public Optional<String> friendlyName() {
        return friendlyName;
    }

    @JsonIgnore
    public Optional<Long> livetv() {
        return livetv;
    }

    @JsonIgnore
    public Optional<String> machineIdentifier() {
        return machineIdentifier;
    }

    @JsonIgnore
    public Optional<Long> musicAnalysis() {
        return musicAnalysis;
    }

    @JsonIgnore
    public Optional<Boolean> myPlex() {
        return myPlex;
    }

    @JsonIgnore
    public Optional<String> myPlexMappingState() {
        return myPlexMappingState;
    }

    @JsonIgnore
    public Optional<String> myPlexSigninState() {
        return myPlexSigninState;
    }

    @JsonIgnore
    public Optional<Boolean> myPlexSubscription() {
        return myPlexSubscription;
    }

    @JsonIgnore
    public Optional<String> myPlexUsername() {
        return myPlexUsername;
    }

    @JsonIgnore
    public Optional<Long> offlineTranscode() {
        return offlineTranscode;
    }

    @JsonIgnore
    public Optional<String> ownerFeatures() {
        return ownerFeatures;
    }

    @JsonIgnore
    public Optional<String> platform() {
        return platform;
    }

    @JsonIgnore
    public Optional<String> platformVersion() {
        return platformVersion;
    }

    @JsonIgnore
    public Optional<Boolean> pluginHost() {
        return pluginHost;
    }

    @JsonIgnore
    public Optional<Boolean> pushNotifications() {
        return pushNotifications;
    }

    @JsonIgnore
    public Optional<Boolean> readOnlyLibraries() {
        return readOnlyLibraries;
    }

    @JsonIgnore
    public Optional<Long> streamingBrainABRVersion() {
        return streamingBrainABRVersion;
    }

    @JsonIgnore
    public Optional<Long> streamingBrainVersion() {
        return streamingBrainVersion;
    }

    @JsonIgnore
    public Optional<Boolean> sync() {
        return sync;
    }

    @JsonIgnore
    public Optional<Long> transcoderActiveVideoSessions() {
        return transcoderActiveVideoSessions;
    }

    @JsonIgnore
    public Optional<Boolean> transcoderAudio() {
        return transcoderAudio;
    }

    @JsonIgnore
    public Optional<Boolean> transcoderLyrics() {
        return transcoderLyrics;
    }

    @JsonIgnore
    public Optional<Boolean> transcoderSubtitles() {
        return transcoderSubtitles;
    }

    @JsonIgnore
    public Optional<Boolean> transcoderVideo() {
        return transcoderVideo;
    }

    @JsonIgnore
    public Optional<String> transcoderVideoBitrates() {
        return transcoderVideoBitrates;
    }

    @JsonIgnore
    public Optional<String> transcoderVideoQualities() {
        return transcoderVideoQualities;
    }

    @JsonIgnore
    public Optional<String> transcoderVideoResolutions() {
        return transcoderVideoResolutions;
    }

    @JsonIgnore
    public Optional<Long> updatedAt() {
        return updatedAt;
    }

    @JsonIgnore
    public Optional<Boolean> updater() {
        return updater;
    }

    @JsonIgnore
    public Optional<String> version() {
        return version;
    }

    @JsonIgnore
    public Optional<Boolean> voiceSearch() {
        return voiceSearch;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<MediaProvider>> mediaProvider() {
        return (Optional<List<MediaProvider>>) mediaProvider;
    }

    public final static Builder builder() {
        return new Builder();
    }

    public GetMediaProvidersMediaContainer withSize(long size) {
        Utils.checkNotNull(size, "size");
        this.size = Optional.ofNullable(size);
        return this;
    }

    public GetMediaProvidersMediaContainer withSize(Optional<Long> size) {
        Utils.checkNotNull(size, "size");
        this.size = size;
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowCameraUpload(boolean allowCameraUpload) {
        Utils.checkNotNull(allowCameraUpload, "allowCameraUpload");
        this.allowCameraUpload = Optional.ofNullable(allowCameraUpload);
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowCameraUpload(Optional<Boolean> allowCameraUpload) {
        Utils.checkNotNull(allowCameraUpload, "allowCameraUpload");
        this.allowCameraUpload = allowCameraUpload;
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowChannelAccess(boolean allowChannelAccess) {
        Utils.checkNotNull(allowChannelAccess, "allowChannelAccess");
        this.allowChannelAccess = Optional.ofNullable(allowChannelAccess);
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowChannelAccess(Optional<Boolean> allowChannelAccess) {
        Utils.checkNotNull(allowChannelAccess, "allowChannelAccess");
        this.allowChannelAccess = allowChannelAccess;
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowSharing(boolean allowSharing) {
        Utils.checkNotNull(allowSharing, "allowSharing");
        this.allowSharing = Optional.ofNullable(allowSharing);
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowSharing(Optional<Boolean> allowSharing) {
        Utils.checkNotNull(allowSharing, "allowSharing");
        this.allowSharing = allowSharing;
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowSync(boolean allowSync) {
        Utils.checkNotNull(allowSync, "allowSync");
        this.allowSync = Optional.ofNullable(allowSync);
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowSync(Optional<Boolean> allowSync) {
        Utils.checkNotNull(allowSync, "allowSync");
        this.allowSync = allowSync;
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowTuners(boolean allowTuners) {
        Utils.checkNotNull(allowTuners, "allowTuners");
        this.allowTuners = Optional.ofNullable(allowTuners);
        return this;
    }

    public GetMediaProvidersMediaContainer withAllowTuners(Optional<Boolean> allowTuners) {
        Utils.checkNotNull(allowTuners, "allowTuners");
        this.allowTuners = allowTuners;
        return this;
    }

    public GetMediaProvidersMediaContainer withBackgroundProcessing(boolean backgroundProcessing) {
        Utils.checkNotNull(backgroundProcessing, "backgroundProcessing");
        this.backgroundProcessing = Optional.ofNullable(backgroundProcessing);
        return this;
    }

    public GetMediaProvidersMediaContainer withBackgroundProcessing(Optional<Boolean> backgroundProcessing) {
        Utils.checkNotNull(backgroundProcessing, "backgroundProcessing");
        this.backgroundProcessing = backgroundProcessing;
        return this;
    }

    public GetMediaProvidersMediaContainer withCertificate(boolean certificate) {
        Utils.checkNotNull(certificate, "certificate");
        this.certificate = Optional.ofNullable(certificate);
        return this;
    }

    public GetMediaProvidersMediaContainer withCertificate(Optional<Boolean> certificate) {
        Utils.checkNotNull(certificate, "certificate");
        this.certificate = certificate;
        return this;
    }

    public GetMediaProvidersMediaContainer withCompanionProxy(boolean companionProxy) {
        Utils.checkNotNull(companionProxy, "companionProxy");
        this.companionProxy = Optional.ofNullable(companionProxy);
        return this;
    }

    public GetMediaProvidersMediaContainer withCompanionProxy(Optional<Boolean> companionProxy) {
        Utils.checkNotNull(companionProxy, "companionProxy");
        this.companionProxy = companionProxy;
        return this;
    }

    public GetMediaProvidersMediaContainer withCountryCode(String countryCode) {
        Utils.checkNotNull(countryCode, "countryCode");
        this.countryCode = Optional.ofNullable(countryCode);
        return this;
    }

    public GetMediaProvidersMediaContainer withCountryCode(Optional<String> countryCode) {
        Utils.checkNotNull(countryCode, "countryCode");
        this.countryCode = countryCode;
        return this;
    }

    public GetMediaProvidersMediaContainer withDiagnostics(String diagnostics) {
        Utils.checkNotNull(diagnostics, "diagnostics");
        this.diagnostics = Optional.ofNullable(diagnostics);
        return this;
    }

    public GetMediaProvidersMediaContainer withDiagnostics(Optional<String> diagnostics) {
        Utils.checkNotNull(diagnostics, "diagnostics");
        this.diagnostics = diagnostics;
        return this;
    }

    public GetMediaProvidersMediaContainer withEventStream(boolean eventStream) {
        Utils.checkNotNull(eventStream, "eventStream");
        this.eventStream = Optional.ofNullable(eventStream);
        return this;
    }

    public GetMediaProvidersMediaContainer withEventStream(Optional<Boolean> eventStream) {
        Utils.checkNotNull(eventStream, "eventStream");
        this.eventStream = eventStream;
        return this;
    }

    public GetMediaProvidersMediaContainer withFriendlyName(String friendlyName) {
        Utils.checkNotNull(friendlyName, "friendlyName");
        this.friendlyName = Optional.ofNullable(friendlyName);
        return this;
    }

    public GetMediaProvidersMediaContainer withFriendlyName(Optional<String> friendlyName) {
        Utils.checkNotNull(friendlyName, "friendlyName");
        this.friendlyName = friendlyName;
        return this;
    }

    public GetMediaProvidersMediaContainer withLivetv(long livetv) {
        Utils.checkNotNull(livetv, "livetv");
        this.livetv = Optional.ofNullable(livetv);
        return this;
    }

    public GetMediaProvidersMediaContainer withLivetv(Optional<Long> livetv) {
        Utils.checkNotNull(livetv, "livetv");
        this.livetv = livetv;
        return this;
    }

    public GetMediaProvidersMediaContainer withMachineIdentifier(String machineIdentifier) {
        Utils.checkNotNull(machineIdentifier, "machineIdentifier");
        this.machineIdentifier = Optional.ofNullable(machineIdentifier);
        return this;
    }

    public GetMediaProvidersMediaContainer withMachineIdentifier(Optional<String> machineIdentifier) {
        Utils.checkNotNull(machineIdentifier, "machineIdentifier");
        this.machineIdentifier = machineIdentifier;
        return this;
    }

    public GetMediaProvidersMediaContainer withMusicAnalysis(long musicAnalysis) {
        Utils.checkNotNull(musicAnalysis, "musicAnalysis");
        this.musicAnalysis = Optional.ofNullable(musicAnalysis);
        return this;
    }

    public GetMediaProvidersMediaContainer withMusicAnalysis(Optional<Long> musicAnalysis) {
        Utils.checkNotNull(musicAnalysis, "musicAnalysis");
        this.musicAnalysis = musicAnalysis;
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlex(boolean myPlex) {
        Utils.checkNotNull(myPlex, "myPlex");
        this.myPlex = Optional.ofNullable(myPlex);
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlex(Optional<Boolean> myPlex) {
        Utils.checkNotNull(myPlex, "myPlex");
        this.myPlex = myPlex;
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexMappingState(String myPlexMappingState) {
        Utils.checkNotNull(myPlexMappingState, "myPlexMappingState");
        this.myPlexMappingState = Optional.ofNullable(myPlexMappingState);
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexMappingState(Optional<String> myPlexMappingState) {
        Utils.checkNotNull(myPlexMappingState, "myPlexMappingState");
        this.myPlexMappingState = myPlexMappingState;
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexSigninState(String myPlexSigninState) {
        Utils.checkNotNull(myPlexSigninState, "myPlexSigninState");
        this.myPlexSigninState = Optional.ofNullable(myPlexSigninState);
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexSigninState(Optional<String> myPlexSigninState) {
        Utils.checkNotNull(myPlexSigninState, "myPlexSigninState");
        this.myPlexSigninState = myPlexSigninState;
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexSubscription(boolean myPlexSubscription) {
        Utils.checkNotNull(myPlexSubscription, "myPlexSubscription");
        this.myPlexSubscription = Optional.ofNullable(myPlexSubscription);
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexSubscription(Optional<Boolean> myPlexSubscription) {
        Utils.checkNotNull(myPlexSubscription, "myPlexSubscription");
        this.myPlexSubscription = myPlexSubscription;
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexUsername(String myPlexUsername) {
        Utils.checkNotNull(myPlexUsername, "myPlexUsername");
        this.myPlexUsername = Optional.ofNullable(myPlexUsername);
        return this;
    }

    public GetMediaProvidersMediaContainer withMyPlexUsername(Optional<String> myPlexUsername) {
        Utils.checkNotNull(myPlexUsername, "myPlexUsername");
        this.myPlexUsername = myPlexUsername;
        return this;
    }

    public GetMediaProvidersMediaContainer withOfflineTranscode(long offlineTranscode) {
        Utils.checkNotNull(offlineTranscode, "offlineTranscode");
        this.offlineTranscode = Optional.ofNullable(offlineTranscode);
        return this;
    }

    public GetMediaProvidersMediaContainer withOfflineTranscode(Optional<Long> offlineTranscode) {
        Utils.checkNotNull(offlineTranscode, "offlineTranscode");
        this.offlineTranscode = offlineTranscode;
        return this;
    }

    public GetMediaProvidersMediaContainer withOwnerFeatures(String ownerFeatures) {
        Utils.checkNotNull(ownerFeatures, "ownerFeatures");
        this.ownerFeatures = Optional.ofNullable(ownerFeatures);
        return this;
    }

    public GetMediaProvidersMediaContainer withOwnerFeatures(Optional<String> ownerFeatures) {
        Utils.checkNotNull(ownerFeatures, "ownerFeatures");
        this.ownerFeatures = ownerFeatures;
        return this;
    }

    public GetMediaProvidersMediaContainer withPlatform(String platform) {
        Utils.checkNotNull(platform, "platform");
        this.platform = Optional.ofNullable(platform);
        return this;
    }

    public GetMediaProvidersMediaContainer withPlatform(Optional<String> platform) {
        Utils.checkNotNull(platform, "platform");
        this.platform = platform;
        return this;
    }

    public GetMediaProvidersMediaContainer withPlatformVersion(String platformVersion) {
        Utils.checkNotNull(platformVersion, "platformVersion");
        this.platformVersion = Optional.ofNullable(platformVersion);
        return this;
    }

    public GetMediaProvidersMediaContainer withPlatformVersion(Optional<String> platformVersion) {
        Utils.checkNotNull(platformVersion, "platformVersion");
        this.platformVersion = platformVersion;
        return this;
    }

    public GetMediaProvidersMediaContainer withPluginHost(boolean pluginHost) {
        Utils.checkNotNull(pluginHost, "pluginHost");
        this.pluginHost = Optional.ofNullable(pluginHost);
        return this;
    }

    public GetMediaProvidersMediaContainer withPluginHost(Optional<Boolean> pluginHost) {
        Utils.checkNotNull(pluginHost, "pluginHost");
        this.pluginHost = pluginHost;
        return this;
    }

    public GetMediaProvidersMediaContainer withPushNotifications(boolean pushNotifications) {
        Utils.checkNotNull(pushNotifications, "pushNotifications");
        this.pushNotifications = Optional.ofNullable(pushNotifications);
        return this;
    }

    public GetMediaProvidersMediaContainer withPushNotifications(Optional<Boolean> pushNotifications) {
        Utils.checkNotNull(pushNotifications, "pushNotifications");
        this.pushNotifications = pushNotifications;
        return this;
    }

    public GetMediaProvidersMediaContainer withReadOnlyLibraries(boolean readOnlyLibraries) {
        Utils.checkNotNull(readOnlyLibraries, "readOnlyLibraries");
        this.readOnlyLibraries = Optional.ofNullable(readOnlyLibraries);
        return this;
    }

    public GetMediaProvidersMediaContainer withReadOnlyLibraries(Optional<Boolean> readOnlyLibraries) {
        Utils.checkNotNull(readOnlyLibraries, "readOnlyLibraries");
        this.readOnlyLibraries = readOnlyLibraries;
        return this;
    }

    public GetMediaProvidersMediaContainer withStreamingBrainABRVersion(long streamingBrainABRVersion) {
        Utils.checkNotNull(streamingBrainABRVersion, "streamingBrainABRVersion");
        this.streamingBrainABRVersion = Optional.ofNullable(streamingBrainABRVersion);
        return this;
    }

    public GetMediaProvidersMediaContainer withStreamingBrainABRVersion(Optional<Long> streamingBrainABRVersion) {
        Utils.checkNotNull(streamingBrainABRVersion, "streamingBrainABRVersion");
        this.streamingBrainABRVersion = streamingBrainABRVersion;
        return this;
    }

    public GetMediaProvidersMediaContainer withStreamingBrainVersion(long streamingBrainVersion) {
        Utils.checkNotNull(streamingBrainVersion, "streamingBrainVersion");
        this.streamingBrainVersion = Optional.ofNullable(streamingBrainVersion);
        return this;
    }

    public GetMediaProvidersMediaContainer withStreamingBrainVersion(Optional<Long> streamingBrainVersion) {
        Utils.checkNotNull(streamingBrainVersion, "streamingBrainVersion");
        this.streamingBrainVersion = streamingBrainVersion;
        return this;
    }

    public GetMediaProvidersMediaContainer withSync(boolean sync) {
        Utils.checkNotNull(sync, "sync");
        this.sync = Optional.ofNullable(sync);
        return this;
    }

    public GetMediaProvidersMediaContainer withSync(Optional<Boolean> sync) {
        Utils.checkNotNull(sync, "sync");
        this.sync = sync;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderActiveVideoSessions(long transcoderActiveVideoSessions) {
        Utils.checkNotNull(transcoderActiveVideoSessions, "transcoderActiveVideoSessions");
        this.transcoderActiveVideoSessions = Optional.ofNullable(transcoderActiveVideoSessions);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderActiveVideoSessions(Optional<Long> transcoderActiveVideoSessions) {
        Utils.checkNotNull(transcoderActiveVideoSessions, "transcoderActiveVideoSessions");
        this.transcoderActiveVideoSessions = transcoderActiveVideoSessions;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderAudio(boolean transcoderAudio) {
        Utils.checkNotNull(transcoderAudio, "transcoderAudio");
        this.transcoderAudio = Optional.ofNullable(transcoderAudio);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderAudio(Optional<Boolean> transcoderAudio) {
        Utils.checkNotNull(transcoderAudio, "transcoderAudio");
        this.transcoderAudio = transcoderAudio;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderLyrics(boolean transcoderLyrics) {
        Utils.checkNotNull(transcoderLyrics, "transcoderLyrics");
        this.transcoderLyrics = Optional.ofNullable(transcoderLyrics);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderLyrics(Optional<Boolean> transcoderLyrics) {
        Utils.checkNotNull(transcoderLyrics, "transcoderLyrics");
        this.transcoderLyrics = transcoderLyrics;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderSubtitles(boolean transcoderSubtitles) {
        Utils.checkNotNull(transcoderSubtitles, "transcoderSubtitles");
        this.transcoderSubtitles = Optional.ofNullable(transcoderSubtitles);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderSubtitles(Optional<Boolean> transcoderSubtitles) {
        Utils.checkNotNull(transcoderSubtitles, "transcoderSubtitles");
        this.transcoderSubtitles = transcoderSubtitles;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideo(boolean transcoderVideo) {
        Utils.checkNotNull(transcoderVideo, "transcoderVideo");
        this.transcoderVideo = Optional.ofNullable(transcoderVideo);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideo(Optional<Boolean> transcoderVideo) {
        Utils.checkNotNull(transcoderVideo, "transcoderVideo");
        this.transcoderVideo = transcoderVideo;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoBitrates(String transcoderVideoBitrates) {
        Utils.checkNotNull(transcoderVideoBitrates, "transcoderVideoBitrates");
        this.transcoderVideoBitrates = Optional.ofNullable(transcoderVideoBitrates);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoBitrates(Optional<String> transcoderVideoBitrates) {
        Utils.checkNotNull(transcoderVideoBitrates, "transcoderVideoBitrates");
        this.transcoderVideoBitrates = transcoderVideoBitrates;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoQualities(String transcoderVideoQualities) {
        Utils.checkNotNull(transcoderVideoQualities, "transcoderVideoQualities");
        this.transcoderVideoQualities = Optional.ofNullable(transcoderVideoQualities);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoQualities(Optional<String> transcoderVideoQualities) {
        Utils.checkNotNull(transcoderVideoQualities, "transcoderVideoQualities");
        this.transcoderVideoQualities = transcoderVideoQualities;
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoResolutions(String transcoderVideoResolutions) {
        Utils.checkNotNull(transcoderVideoResolutions, "transcoderVideoResolutions");
        this.transcoderVideoResolutions = Optional.ofNullable(transcoderVideoResolutions);
        return this;
    }

    public GetMediaProvidersMediaContainer withTranscoderVideoResolutions(Optional<String> transcoderVideoResolutions) {
        Utils.checkNotNull(transcoderVideoResolutions, "transcoderVideoResolutions");
        this.transcoderVideoResolutions = transcoderVideoResolutions;
        return this;
    }

    public GetMediaProvidersMediaContainer withUpdatedAt(long updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = Optional.ofNullable(updatedAt);
        return this;
    }

    public GetMediaProvidersMediaContainer withUpdatedAt(Optional<Long> updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = updatedAt;
        return this;
    }

    public GetMediaProvidersMediaContainer withUpdater(boolean updater) {
        Utils.checkNotNull(updater, "updater");
        this.updater = Optional.ofNullable(updater);
        return this;
    }

    public GetMediaProvidersMediaContainer withUpdater(Optional<Boolean> updater) {
        Utils.checkNotNull(updater, "updater");
        this.updater = updater;
        return this;
    }

    public GetMediaProvidersMediaContainer withVersion(String version) {
        Utils.checkNotNull(version, "version");
        this.version = Optional.ofNullable(version);
        return this;
    }

    public GetMediaProvidersMediaContainer withVersion(Optional<String> version) {
        Utils.checkNotNull(version, "version");
        this.version = version;
        return this;
    }

    public GetMediaProvidersMediaContainer withVoiceSearch(boolean voiceSearch) {
        Utils.checkNotNull(voiceSearch, "voiceSearch");
        this.voiceSearch = Optional.ofNullable(voiceSearch);
        return this;
    }

    public GetMediaProvidersMediaContainer withVoiceSearch(Optional<Boolean> voiceSearch) {
        Utils.checkNotNull(voiceSearch, "voiceSearch");
        this.voiceSearch = voiceSearch;
        return this;
    }

    public GetMediaProvidersMediaContainer withMediaProvider(List<MediaProvider> mediaProvider) {
        Utils.checkNotNull(mediaProvider, "mediaProvider");
        this.mediaProvider = Optional.ofNullable(mediaProvider);
        return this;
    }

    public GetMediaProvidersMediaContainer withMediaProvider(Optional<? extends List<MediaProvider>> mediaProvider) {
        Utils.checkNotNull(mediaProvider, "mediaProvider");
        this.mediaProvider = mediaProvider;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetMediaProvidersMediaContainer other = (GetMediaProvidersMediaContainer) o;
        return 
            Objects.deepEquals(this.size, other.size) &&
            Objects.deepEquals(this.allowCameraUpload, other.allowCameraUpload) &&
            Objects.deepEquals(this.allowChannelAccess, other.allowChannelAccess) &&
            Objects.deepEquals(this.allowSharing, other.allowSharing) &&
            Objects.deepEquals(this.allowSync, other.allowSync) &&
            Objects.deepEquals(this.allowTuners, other.allowTuners) &&
            Objects.deepEquals(this.backgroundProcessing, other.backgroundProcessing) &&
            Objects.deepEquals(this.certificate, other.certificate) &&
            Objects.deepEquals(this.companionProxy, other.companionProxy) &&
            Objects.deepEquals(this.countryCode, other.countryCode) &&
            Objects.deepEquals(this.diagnostics, other.diagnostics) &&
            Objects.deepEquals(this.eventStream, other.eventStream) &&
            Objects.deepEquals(this.friendlyName, other.friendlyName) &&
            Objects.deepEquals(this.livetv, other.livetv) &&
            Objects.deepEquals(this.machineIdentifier, other.machineIdentifier) &&
            Objects.deepEquals(this.musicAnalysis, other.musicAnalysis) &&
            Objects.deepEquals(this.myPlex, other.myPlex) &&
            Objects.deepEquals(this.myPlexMappingState, other.myPlexMappingState) &&
            Objects.deepEquals(this.myPlexSigninState, other.myPlexSigninState) &&
            Objects.deepEquals(this.myPlexSubscription, other.myPlexSubscription) &&
            Objects.deepEquals(this.myPlexUsername, other.myPlexUsername) &&
            Objects.deepEquals(this.offlineTranscode, other.offlineTranscode) &&
            Objects.deepEquals(this.ownerFeatures, other.ownerFeatures) &&
            Objects.deepEquals(this.platform, other.platform) &&
            Objects.deepEquals(this.platformVersion, other.platformVersion) &&
            Objects.deepEquals(this.pluginHost, other.pluginHost) &&
            Objects.deepEquals(this.pushNotifications, other.pushNotifications) &&
            Objects.deepEquals(this.readOnlyLibraries, other.readOnlyLibraries) &&
            Objects.deepEquals(this.streamingBrainABRVersion, other.streamingBrainABRVersion) &&
            Objects.deepEquals(this.streamingBrainVersion, other.streamingBrainVersion) &&
            Objects.deepEquals(this.sync, other.sync) &&
            Objects.deepEquals(this.transcoderActiveVideoSessions, other.transcoderActiveVideoSessions) &&
            Objects.deepEquals(this.transcoderAudio, other.transcoderAudio) &&
            Objects.deepEquals(this.transcoderLyrics, other.transcoderLyrics) &&
            Objects.deepEquals(this.transcoderSubtitles, other.transcoderSubtitles) &&
            Objects.deepEquals(this.transcoderVideo, other.transcoderVideo) &&
            Objects.deepEquals(this.transcoderVideoBitrates, other.transcoderVideoBitrates) &&
            Objects.deepEquals(this.transcoderVideoQualities, other.transcoderVideoQualities) &&
            Objects.deepEquals(this.transcoderVideoResolutions, other.transcoderVideoResolutions) &&
            Objects.deepEquals(this.updatedAt, other.updatedAt) &&
            Objects.deepEquals(this.updater, other.updater) &&
            Objects.deepEquals(this.version, other.version) &&
            Objects.deepEquals(this.voiceSearch, other.voiceSearch) &&
            Objects.deepEquals(this.mediaProvider, other.mediaProvider);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            size,
            allowCameraUpload,
            allowChannelAccess,
            allowSharing,
            allowSync,
            allowTuners,
            backgroundProcessing,
            certificate,
            companionProxy,
            countryCode,
            diagnostics,
            eventStream,
            friendlyName,
            livetv,
            machineIdentifier,
            musicAnalysis,
            myPlex,
            myPlexMappingState,
            myPlexSigninState,
            myPlexSubscription,
            myPlexUsername,
            offlineTranscode,
            ownerFeatures,
            platform,
            platformVersion,
            pluginHost,
            pushNotifications,
            readOnlyLibraries,
            streamingBrainABRVersion,
            streamingBrainVersion,
            sync,
            transcoderActiveVideoSessions,
            transcoderAudio,
            transcoderLyrics,
            transcoderSubtitles,
            transcoderVideo,
            transcoderVideoBitrates,
            transcoderVideoQualities,
            transcoderVideoResolutions,
            updatedAt,
            updater,
            version,
            voiceSearch,
            mediaProvider);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetMediaProvidersMediaContainer.class,
                "size", size,
                "allowCameraUpload", allowCameraUpload,
                "allowChannelAccess", allowChannelAccess,
                "allowSharing", allowSharing,
                "allowSync", allowSync,
                "allowTuners", allowTuners,
                "backgroundProcessing", backgroundProcessing,
                "certificate", certificate,
                "companionProxy", companionProxy,
                "countryCode", countryCode,
                "diagnostics", diagnostics,
                "eventStream", eventStream,
                "friendlyName", friendlyName,
                "livetv", livetv,
                "machineIdentifier", machineIdentifier,
                "musicAnalysis", musicAnalysis,
                "myPlex", myPlex,
                "myPlexMappingState", myPlexMappingState,
                "myPlexSigninState", myPlexSigninState,
                "myPlexSubscription", myPlexSubscription,
                "myPlexUsername", myPlexUsername,
                "offlineTranscode", offlineTranscode,
                "ownerFeatures", ownerFeatures,
                "platform", platform,
                "platformVersion", platformVersion,
                "pluginHost", pluginHost,
                "pushNotifications", pushNotifications,
                "readOnlyLibraries", readOnlyLibraries,
                "streamingBrainABRVersion", streamingBrainABRVersion,
                "streamingBrainVersion", streamingBrainVersion,
                "sync", sync,
                "transcoderActiveVideoSessions", transcoderActiveVideoSessions,
                "transcoderAudio", transcoderAudio,
                "transcoderLyrics", transcoderLyrics,
                "transcoderSubtitles", transcoderSubtitles,
                "transcoderVideo", transcoderVideo,
                "transcoderVideoBitrates", transcoderVideoBitrates,
                "transcoderVideoQualities", transcoderVideoQualities,
                "transcoderVideoResolutions", transcoderVideoResolutions,
                "updatedAt", updatedAt,
                "updater", updater,
                "version", version,
                "voiceSearch", voiceSearch,
                "mediaProvider", mediaProvider);
    }
    
    public final static class Builder {
 
        private Optional<Long> size = Optional.empty();
 
        private Optional<Boolean> allowCameraUpload = Optional.empty();
 
        private Optional<Boolean> allowChannelAccess = Optional.empty();
 
        private Optional<Boolean> allowSharing = Optional.empty();
 
        private Optional<Boolean> allowSync = Optional.empty();
 
        private Optional<Boolean> allowTuners = Optional.empty();
 
        private Optional<Boolean> backgroundProcessing = Optional.empty();
 
        private Optional<Boolean> certificate = Optional.empty();
 
        private Optional<Boolean> companionProxy = Optional.empty();
 
        private Optional<String> countryCode = Optional.empty();
 
        private Optional<String> diagnostics = Optional.empty();
 
        private Optional<Boolean> eventStream = Optional.empty();
 
        private Optional<String> friendlyName = Optional.empty();
 
        private Optional<Long> livetv = Optional.empty();
 
        private Optional<String> machineIdentifier = Optional.empty();
 
        private Optional<Long> musicAnalysis = Optional.empty();
 
        private Optional<Boolean> myPlex = Optional.empty();
 
        private Optional<String> myPlexMappingState = Optional.empty();
 
        private Optional<String> myPlexSigninState = Optional.empty();
 
        private Optional<Boolean> myPlexSubscription = Optional.empty();
 
        private Optional<String> myPlexUsername = Optional.empty();
 
        private Optional<Long> offlineTranscode = Optional.empty();
 
        private Optional<String> ownerFeatures = Optional.empty();
 
        private Optional<String> platform = Optional.empty();
 
        private Optional<String> platformVersion = Optional.empty();
 
        private Optional<Boolean> pluginHost = Optional.empty();
 
        private Optional<Boolean> pushNotifications = Optional.empty();
 
        private Optional<Boolean> readOnlyLibraries = Optional.empty();
 
        private Optional<Long> streamingBrainABRVersion = Optional.empty();
 
        private Optional<Long> streamingBrainVersion = Optional.empty();
 
        private Optional<Boolean> sync = Optional.empty();
 
        private Optional<Long> transcoderActiveVideoSessions = Optional.empty();
 
        private Optional<Boolean> transcoderAudio = Optional.empty();
 
        private Optional<Boolean> transcoderLyrics = Optional.empty();
 
        private Optional<Boolean> transcoderSubtitles = Optional.empty();
 
        private Optional<Boolean> transcoderVideo = Optional.empty();
 
        private Optional<String> transcoderVideoBitrates = Optional.empty();
 
        private Optional<String> transcoderVideoQualities = Optional.empty();
 
        private Optional<String> transcoderVideoResolutions = Optional.empty();
 
        private Optional<Long> updatedAt = Optional.empty();
 
        private Optional<Boolean> updater = Optional.empty();
 
        private Optional<String> version = Optional.empty();
 
        private Optional<Boolean> voiceSearch = Optional.empty();
 
        private Optional<? extends List<MediaProvider>> mediaProvider = Optional.empty();  
        
        private Builder() {
          // force use of static builder() method
        }

        public Builder size(long size) {
            Utils.checkNotNull(size, "size");
            this.size = Optional.ofNullable(size);
            return this;
        }

        public Builder size(Optional<Long> size) {
            Utils.checkNotNull(size, "size");
            this.size = size;
            return this;
        }

        public Builder allowCameraUpload(boolean allowCameraUpload) {
            Utils.checkNotNull(allowCameraUpload, "allowCameraUpload");
            this.allowCameraUpload = Optional.ofNullable(allowCameraUpload);
            return this;
        }

        public Builder allowCameraUpload(Optional<Boolean> allowCameraUpload) {
            Utils.checkNotNull(allowCameraUpload, "allowCameraUpload");
            this.allowCameraUpload = allowCameraUpload;
            return this;
        }

        public Builder allowChannelAccess(boolean allowChannelAccess) {
            Utils.checkNotNull(allowChannelAccess, "allowChannelAccess");
            this.allowChannelAccess = Optional.ofNullable(allowChannelAccess);
            return this;
        }

        public Builder allowChannelAccess(Optional<Boolean> allowChannelAccess) {
            Utils.checkNotNull(allowChannelAccess, "allowChannelAccess");
            this.allowChannelAccess = allowChannelAccess;
            return this;
        }

        public Builder allowSharing(boolean allowSharing) {
            Utils.checkNotNull(allowSharing, "allowSharing");
            this.allowSharing = Optional.ofNullable(allowSharing);
            return this;
        }

        public Builder allowSharing(Optional<Boolean> allowSharing) {
            Utils.checkNotNull(allowSharing, "allowSharing");
            this.allowSharing = allowSharing;
            return this;
        }

        public Builder allowSync(boolean allowSync) {
            Utils.checkNotNull(allowSync, "allowSync");
            this.allowSync = Optional.ofNullable(allowSync);
            return this;
        }

        public Builder allowSync(Optional<Boolean> allowSync) {
            Utils.checkNotNull(allowSync, "allowSync");
            this.allowSync = allowSync;
            return this;
        }

        public Builder allowTuners(boolean allowTuners) {
            Utils.checkNotNull(allowTuners, "allowTuners");
            this.allowTuners = Optional.ofNullable(allowTuners);
            return this;
        }

        public Builder allowTuners(Optional<Boolean> allowTuners) {
            Utils.checkNotNull(allowTuners, "allowTuners");
            this.allowTuners = allowTuners;
            return this;
        }

        public Builder backgroundProcessing(boolean backgroundProcessing) {
            Utils.checkNotNull(backgroundProcessing, "backgroundProcessing");
            this.backgroundProcessing = Optional.ofNullable(backgroundProcessing);
            return this;
        }

        public Builder backgroundProcessing(Optional<Boolean> backgroundProcessing) {
            Utils.checkNotNull(backgroundProcessing, "backgroundProcessing");
            this.backgroundProcessing = backgroundProcessing;
            return this;
        }

        public Builder certificate(boolean certificate) {
            Utils.checkNotNull(certificate, "certificate");
            this.certificate = Optional.ofNullable(certificate);
            return this;
        }

        public Builder certificate(Optional<Boolean> certificate) {
            Utils.checkNotNull(certificate, "certificate");
            this.certificate = certificate;
            return this;
        }

        public Builder companionProxy(boolean companionProxy) {
            Utils.checkNotNull(companionProxy, "companionProxy");
            this.companionProxy = Optional.ofNullable(companionProxy);
            return this;
        }

        public Builder companionProxy(Optional<Boolean> companionProxy) {
            Utils.checkNotNull(companionProxy, "companionProxy");
            this.companionProxy = companionProxy;
            return this;
        }

        public Builder countryCode(String countryCode) {
            Utils.checkNotNull(countryCode, "countryCode");
            this.countryCode = Optional.ofNullable(countryCode);
            return this;
        }

        public Builder countryCode(Optional<String> countryCode) {
            Utils.checkNotNull(countryCode, "countryCode");
            this.countryCode = countryCode;
            return this;
        }

        public Builder diagnostics(String diagnostics) {
            Utils.checkNotNull(diagnostics, "diagnostics");
            this.diagnostics = Optional.ofNullable(diagnostics);
            return this;
        }

        public Builder diagnostics(Optional<String> diagnostics) {
            Utils.checkNotNull(diagnostics, "diagnostics");
            this.diagnostics = diagnostics;
            return this;
        }

        public Builder eventStream(boolean eventStream) {
            Utils.checkNotNull(eventStream, "eventStream");
            this.eventStream = Optional.ofNullable(eventStream);
            return this;
        }

        public Builder eventStream(Optional<Boolean> eventStream) {
            Utils.checkNotNull(eventStream, "eventStream");
            this.eventStream = eventStream;
            return this;
        }

        public Builder friendlyName(String friendlyName) {
            Utils.checkNotNull(friendlyName, "friendlyName");
            this.friendlyName = Optional.ofNullable(friendlyName);
            return this;
        }

        public Builder friendlyName(Optional<String> friendlyName) {
            Utils.checkNotNull(friendlyName, "friendlyName");
            this.friendlyName = friendlyName;
            return this;
        }

        public Builder livetv(long livetv) {
            Utils.checkNotNull(livetv, "livetv");
            this.livetv = Optional.ofNullable(livetv);
            return this;
        }

        public Builder livetv(Optional<Long> livetv) {
            Utils.checkNotNull(livetv, "livetv");
            this.livetv = livetv;
            return this;
        }

        public Builder machineIdentifier(String machineIdentifier) {
            Utils.checkNotNull(machineIdentifier, "machineIdentifier");
            this.machineIdentifier = Optional.ofNullable(machineIdentifier);
            return this;
        }

        public Builder machineIdentifier(Optional<String> machineIdentifier) {
            Utils.checkNotNull(machineIdentifier, "machineIdentifier");
            this.machineIdentifier = machineIdentifier;
            return this;
        }

        public Builder musicAnalysis(long musicAnalysis) {
            Utils.checkNotNull(musicAnalysis, "musicAnalysis");
            this.musicAnalysis = Optional.ofNullable(musicAnalysis);
            return this;
        }

        public Builder musicAnalysis(Optional<Long> musicAnalysis) {
            Utils.checkNotNull(musicAnalysis, "musicAnalysis");
            this.musicAnalysis = musicAnalysis;
            return this;
        }

        public Builder myPlex(boolean myPlex) {
            Utils.checkNotNull(myPlex, "myPlex");
            this.myPlex = Optional.ofNullable(myPlex);
            return this;
        }

        public Builder myPlex(Optional<Boolean> myPlex) {
            Utils.checkNotNull(myPlex, "myPlex");
            this.myPlex = myPlex;
            return this;
        }

        public Builder myPlexMappingState(String myPlexMappingState) {
            Utils.checkNotNull(myPlexMappingState, "myPlexMappingState");
            this.myPlexMappingState = Optional.ofNullable(myPlexMappingState);
            return this;
        }

        public Builder myPlexMappingState(Optional<String> myPlexMappingState) {
            Utils.checkNotNull(myPlexMappingState, "myPlexMappingState");
            this.myPlexMappingState = myPlexMappingState;
            return this;
        }

        public Builder myPlexSigninState(String myPlexSigninState) {
            Utils.checkNotNull(myPlexSigninState, "myPlexSigninState");
            this.myPlexSigninState = Optional.ofNullable(myPlexSigninState);
            return this;
        }

        public Builder myPlexSigninState(Optional<String> myPlexSigninState) {
            Utils.checkNotNull(myPlexSigninState, "myPlexSigninState");
            this.myPlexSigninState = myPlexSigninState;
            return this;
        }

        public Builder myPlexSubscription(boolean myPlexSubscription) {
            Utils.checkNotNull(myPlexSubscription, "myPlexSubscription");
            this.myPlexSubscription = Optional.ofNullable(myPlexSubscription);
            return this;
        }

        public Builder myPlexSubscription(Optional<Boolean> myPlexSubscription) {
            Utils.checkNotNull(myPlexSubscription, "myPlexSubscription");
            this.myPlexSubscription = myPlexSubscription;
            return this;
        }

        public Builder myPlexUsername(String myPlexUsername) {
            Utils.checkNotNull(myPlexUsername, "myPlexUsername");
            this.myPlexUsername = Optional.ofNullable(myPlexUsername);
            return this;
        }

        public Builder myPlexUsername(Optional<String> myPlexUsername) {
            Utils.checkNotNull(myPlexUsername, "myPlexUsername");
            this.myPlexUsername = myPlexUsername;
            return this;
        }

        public Builder offlineTranscode(long offlineTranscode) {
            Utils.checkNotNull(offlineTranscode, "offlineTranscode");
            this.offlineTranscode = Optional.ofNullable(offlineTranscode);
            return this;
        }

        public Builder offlineTranscode(Optional<Long> offlineTranscode) {
            Utils.checkNotNull(offlineTranscode, "offlineTranscode");
            this.offlineTranscode = offlineTranscode;
            return this;
        }

        public Builder ownerFeatures(String ownerFeatures) {
            Utils.checkNotNull(ownerFeatures, "ownerFeatures");
            this.ownerFeatures = Optional.ofNullable(ownerFeatures);
            return this;
        }

        public Builder ownerFeatures(Optional<String> ownerFeatures) {
            Utils.checkNotNull(ownerFeatures, "ownerFeatures");
            this.ownerFeatures = ownerFeatures;
            return this;
        }

        public Builder platform(String platform) {
            Utils.checkNotNull(platform, "platform");
            this.platform = Optional.ofNullable(platform);
            return this;
        }

        public Builder platform(Optional<String> platform) {
            Utils.checkNotNull(platform, "platform");
            this.platform = platform;
            return this;
        }

        public Builder platformVersion(String platformVersion) {
            Utils.checkNotNull(platformVersion, "platformVersion");
            this.platformVersion = Optional.ofNullable(platformVersion);
            return this;
        }

        public Builder platformVersion(Optional<String> platformVersion) {
            Utils.checkNotNull(platformVersion, "platformVersion");
            this.platformVersion = platformVersion;
            return this;
        }

        public Builder pluginHost(boolean pluginHost) {
            Utils.checkNotNull(pluginHost, "pluginHost");
            this.pluginHost = Optional.ofNullable(pluginHost);
            return this;
        }

        public Builder pluginHost(Optional<Boolean> pluginHost) {
            Utils.checkNotNull(pluginHost, "pluginHost");
            this.pluginHost = pluginHost;
            return this;
        }

        public Builder pushNotifications(boolean pushNotifications) {
            Utils.checkNotNull(pushNotifications, "pushNotifications");
            this.pushNotifications = Optional.ofNullable(pushNotifications);
            return this;
        }

        public Builder pushNotifications(Optional<Boolean> pushNotifications) {
            Utils.checkNotNull(pushNotifications, "pushNotifications");
            this.pushNotifications = pushNotifications;
            return this;
        }

        public Builder readOnlyLibraries(boolean readOnlyLibraries) {
            Utils.checkNotNull(readOnlyLibraries, "readOnlyLibraries");
            this.readOnlyLibraries = Optional.ofNullable(readOnlyLibraries);
            return this;
        }

        public Builder readOnlyLibraries(Optional<Boolean> readOnlyLibraries) {
            Utils.checkNotNull(readOnlyLibraries, "readOnlyLibraries");
            this.readOnlyLibraries = readOnlyLibraries;
            return this;
        }

        public Builder streamingBrainABRVersion(long streamingBrainABRVersion) {
            Utils.checkNotNull(streamingBrainABRVersion, "streamingBrainABRVersion");
            this.streamingBrainABRVersion = Optional.ofNullable(streamingBrainABRVersion);
            return this;
        }

        public Builder streamingBrainABRVersion(Optional<Long> streamingBrainABRVersion) {
            Utils.checkNotNull(streamingBrainABRVersion, "streamingBrainABRVersion");
            this.streamingBrainABRVersion = streamingBrainABRVersion;
            return this;
        }

        public Builder streamingBrainVersion(long streamingBrainVersion) {
            Utils.checkNotNull(streamingBrainVersion, "streamingBrainVersion");
            this.streamingBrainVersion = Optional.ofNullable(streamingBrainVersion);
            return this;
        }

        public Builder streamingBrainVersion(Optional<Long> streamingBrainVersion) {
            Utils.checkNotNull(streamingBrainVersion, "streamingBrainVersion");
            this.streamingBrainVersion = streamingBrainVersion;
            return this;
        }

        public Builder sync(boolean sync) {
            Utils.checkNotNull(sync, "sync");
            this.sync = Optional.ofNullable(sync);
            return this;
        }

        public Builder sync(Optional<Boolean> sync) {
            Utils.checkNotNull(sync, "sync");
            this.sync = sync;
            return this;
        }

        public Builder transcoderActiveVideoSessions(long transcoderActiveVideoSessions) {
            Utils.checkNotNull(transcoderActiveVideoSessions, "transcoderActiveVideoSessions");
            this.transcoderActiveVideoSessions = Optional.ofNullable(transcoderActiveVideoSessions);
            return this;
        }

        public Builder transcoderActiveVideoSessions(Optional<Long> transcoderActiveVideoSessions) {
            Utils.checkNotNull(transcoderActiveVideoSessions, "transcoderActiveVideoSessions");
            this.transcoderActiveVideoSessions = transcoderActiveVideoSessions;
            return this;
        }

        public Builder transcoderAudio(boolean transcoderAudio) {
            Utils.checkNotNull(transcoderAudio, "transcoderAudio");
            this.transcoderAudio = Optional.ofNullable(transcoderAudio);
            return this;
        }

        public Builder transcoderAudio(Optional<Boolean> transcoderAudio) {
            Utils.checkNotNull(transcoderAudio, "transcoderAudio");
            this.transcoderAudio = transcoderAudio;
            return this;
        }

        public Builder transcoderLyrics(boolean transcoderLyrics) {
            Utils.checkNotNull(transcoderLyrics, "transcoderLyrics");
            this.transcoderLyrics = Optional.ofNullable(transcoderLyrics);
            return this;
        }

        public Builder transcoderLyrics(Optional<Boolean> transcoderLyrics) {
            Utils.checkNotNull(transcoderLyrics, "transcoderLyrics");
            this.transcoderLyrics = transcoderLyrics;
            return this;
        }

        public Builder transcoderSubtitles(boolean transcoderSubtitles) {
            Utils.checkNotNull(transcoderSubtitles, "transcoderSubtitles");
            this.transcoderSubtitles = Optional.ofNullable(transcoderSubtitles);
            return this;
        }

        public Builder transcoderSubtitles(Optional<Boolean> transcoderSubtitles) {
            Utils.checkNotNull(transcoderSubtitles, "transcoderSubtitles");
            this.transcoderSubtitles = transcoderSubtitles;
            return this;
        }

        public Builder transcoderVideo(boolean transcoderVideo) {
            Utils.checkNotNull(transcoderVideo, "transcoderVideo");
            this.transcoderVideo = Optional.ofNullable(transcoderVideo);
            return this;
        }

        public Builder transcoderVideo(Optional<Boolean> transcoderVideo) {
            Utils.checkNotNull(transcoderVideo, "transcoderVideo");
            this.transcoderVideo = transcoderVideo;
            return this;
        }

        public Builder transcoderVideoBitrates(String transcoderVideoBitrates) {
            Utils.checkNotNull(transcoderVideoBitrates, "transcoderVideoBitrates");
            this.transcoderVideoBitrates = Optional.ofNullable(transcoderVideoBitrates);
            return this;
        }

        public Builder transcoderVideoBitrates(Optional<String> transcoderVideoBitrates) {
            Utils.checkNotNull(transcoderVideoBitrates, "transcoderVideoBitrates");
            this.transcoderVideoBitrates = transcoderVideoBitrates;
            return this;
        }

        public Builder transcoderVideoQualities(String transcoderVideoQualities) {
            Utils.checkNotNull(transcoderVideoQualities, "transcoderVideoQualities");
            this.transcoderVideoQualities = Optional.ofNullable(transcoderVideoQualities);
            return this;
        }

        public Builder transcoderVideoQualities(Optional<String> transcoderVideoQualities) {
            Utils.checkNotNull(transcoderVideoQualities, "transcoderVideoQualities");
            this.transcoderVideoQualities = transcoderVideoQualities;
            return this;
        }

        public Builder transcoderVideoResolutions(String transcoderVideoResolutions) {
            Utils.checkNotNull(transcoderVideoResolutions, "transcoderVideoResolutions");
            this.transcoderVideoResolutions = Optional.ofNullable(transcoderVideoResolutions);
            return this;
        }

        public Builder transcoderVideoResolutions(Optional<String> transcoderVideoResolutions) {
            Utils.checkNotNull(transcoderVideoResolutions, "transcoderVideoResolutions");
            this.transcoderVideoResolutions = transcoderVideoResolutions;
            return this;
        }

        public Builder updatedAt(long updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = Optional.ofNullable(updatedAt);
            return this;
        }

        public Builder updatedAt(Optional<Long> updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = updatedAt;
            return this;
        }

        public Builder updater(boolean updater) {
            Utils.checkNotNull(updater, "updater");
            this.updater = Optional.ofNullable(updater);
            return this;
        }

        public Builder updater(Optional<Boolean> updater) {
            Utils.checkNotNull(updater, "updater");
            this.updater = updater;
            return this;
        }

        public Builder version(String version) {
            Utils.checkNotNull(version, "version");
            this.version = Optional.ofNullable(version);
            return this;
        }

        public Builder version(Optional<String> version) {
            Utils.checkNotNull(version, "version");
            this.version = version;
            return this;
        }

        public Builder voiceSearch(boolean voiceSearch) {
            Utils.checkNotNull(voiceSearch, "voiceSearch");
            this.voiceSearch = Optional.ofNullable(voiceSearch);
            return this;
        }

        public Builder voiceSearch(Optional<Boolean> voiceSearch) {
            Utils.checkNotNull(voiceSearch, "voiceSearch");
            this.voiceSearch = voiceSearch;
            return this;
        }

        public Builder mediaProvider(List<MediaProvider> mediaProvider) {
            Utils.checkNotNull(mediaProvider, "mediaProvider");
            this.mediaProvider = Optional.ofNullable(mediaProvider);
            return this;
        }

        public Builder mediaProvider(Optional<? extends List<MediaProvider>> mediaProvider) {
            Utils.checkNotNull(mediaProvider, "mediaProvider");
            this.mediaProvider = mediaProvider;
            return this;
        }
        
        public GetMediaProvidersMediaContainer build() {
            return new GetMediaProvidersMediaContainer(
                size,
                allowCameraUpload,
                allowChannelAccess,
                allowSharing,
                allowSync,
                allowTuners,
                backgroundProcessing,
                certificate,
                companionProxy,
                countryCode,
                diagnostics,
                eventStream,
                friendlyName,
                livetv,
                machineIdentifier,
                musicAnalysis,
                myPlex,
                myPlexMappingState,
                myPlexSigninState,
                myPlexSubscription,
                myPlexUsername,
                offlineTranscode,
                ownerFeatures,
                platform,
                platformVersion,
                pluginHost,
                pushNotifications,
                readOnlyLibraries,
                streamingBrainABRVersion,
                streamingBrainVersion,
                sync,
                transcoderActiveVideoSessions,
                transcoderAudio,
                transcoderLyrics,
                transcoderSubtitles,
                transcoderVideo,
                transcoderVideoBitrates,
                transcoderVideoQualities,
                transcoderVideoResolutions,
                updatedAt,
                updater,
                version,
                voiceSearch,
                mediaProvider);
        }
    }
}

