/* 
 * 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.Integer;
import java.lang.Override;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;


public class GetMetaDataByRatingKeyStream {

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("id")
    private Optional<Integer> id;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("streamType")
    private Optional<Integer> streamType;

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("index")
    private Optional<Integer> index;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("bitrate")
    private Optional<Integer> bitrate;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("bitDepth")
    private Optional<Integer> bitDepth;

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("codedHeight")
    private Optional<Integer> codedHeight;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("codedWidth")
    private Optional<Integer> codedWidth;

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

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

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("frameRate")
    private Optional<Integer> frameRate;

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("height")
    private Optional<Integer> height;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("level")
    private Optional<Integer> level;

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("refFrames")
    private Optional<Integer> refFrames;

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("width")
    private Optional<Integer> width;

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

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("channels")
    private Optional<Integer> channels;

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

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

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("samplingRate")
    private Optional<Integer> samplingRate;

    @JsonCreator
    public GetMetaDataByRatingKeyStream(
            @JsonProperty("id") Optional<Integer> id,
            @JsonProperty("streamType") Optional<Integer> streamType,
            @JsonProperty("default") Optional<Boolean> default_,
            @JsonProperty("codec") Optional<String> codec,
            @JsonProperty("index") Optional<Integer> index,
            @JsonProperty("bitrate") Optional<Integer> bitrate,
            @JsonProperty("bitDepth") Optional<Integer> bitDepth,
            @JsonProperty("chromaLocation") Optional<String> chromaLocation,
            @JsonProperty("chromaSubsampling") Optional<String> chromaSubsampling,
            @JsonProperty("codedHeight") Optional<Integer> codedHeight,
            @JsonProperty("codedWidth") Optional<Integer> codedWidth,
            @JsonProperty("colorPrimaries") Optional<String> colorPrimaries,
            @JsonProperty("colorRange") Optional<String> colorRange,
            @JsonProperty("colorSpace") Optional<String> colorSpace,
            @JsonProperty("colorTrc") Optional<String> colorTrc,
            @JsonProperty("frameRate") Optional<Integer> frameRate,
            @JsonProperty("hasScalingMatrix") Optional<Boolean> hasScalingMatrix,
            @JsonProperty("height") Optional<Integer> height,
            @JsonProperty("level") Optional<Integer> level,
            @JsonProperty("profile") Optional<String> profile,
            @JsonProperty("refFrames") Optional<Integer> refFrames,
            @JsonProperty("scanType") Optional<String> scanType,
            @JsonProperty("streamIdentifier") Optional<String> streamIdentifier,
            @JsonProperty("width") Optional<Integer> width,
            @JsonProperty("displayTitle") Optional<String> displayTitle,
            @JsonProperty("extendedDisplayTitle") Optional<String> extendedDisplayTitle,
            @JsonProperty("selected") Optional<Boolean> selected,
            @JsonProperty("channels") Optional<Integer> channels,
            @JsonProperty("language") Optional<String> language,
            @JsonProperty("languageTag") Optional<String> languageTag,
            @JsonProperty("languageCode") Optional<String> languageCode,
            @JsonProperty("samplingRate") Optional<Integer> samplingRate) {
        Utils.checkNotNull(id, "id");
        Utils.checkNotNull(streamType, "streamType");
        Utils.checkNotNull(default_, "default_");
        Utils.checkNotNull(codec, "codec");
        Utils.checkNotNull(index, "index");
        Utils.checkNotNull(bitrate, "bitrate");
        Utils.checkNotNull(bitDepth, "bitDepth");
        Utils.checkNotNull(chromaLocation, "chromaLocation");
        Utils.checkNotNull(chromaSubsampling, "chromaSubsampling");
        Utils.checkNotNull(codedHeight, "codedHeight");
        Utils.checkNotNull(codedWidth, "codedWidth");
        Utils.checkNotNull(colorPrimaries, "colorPrimaries");
        Utils.checkNotNull(colorRange, "colorRange");
        Utils.checkNotNull(colorSpace, "colorSpace");
        Utils.checkNotNull(colorTrc, "colorTrc");
        Utils.checkNotNull(frameRate, "frameRate");
        Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix");
        Utils.checkNotNull(height, "height");
        Utils.checkNotNull(level, "level");
        Utils.checkNotNull(profile, "profile");
        Utils.checkNotNull(refFrames, "refFrames");
        Utils.checkNotNull(scanType, "scanType");
        Utils.checkNotNull(streamIdentifier, "streamIdentifier");
        Utils.checkNotNull(width, "width");
        Utils.checkNotNull(displayTitle, "displayTitle");
        Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle");
        Utils.checkNotNull(selected, "selected");
        Utils.checkNotNull(channels, "channels");
        Utils.checkNotNull(language, "language");
        Utils.checkNotNull(languageTag, "languageTag");
        Utils.checkNotNull(languageCode, "languageCode");
        Utils.checkNotNull(samplingRate, "samplingRate");
        this.id = id;
        this.streamType = streamType;
        this.default_ = default_;
        this.codec = codec;
        this.index = index;
        this.bitrate = bitrate;
        this.bitDepth = bitDepth;
        this.chromaLocation = chromaLocation;
        this.chromaSubsampling = chromaSubsampling;
        this.codedHeight = codedHeight;
        this.codedWidth = codedWidth;
        this.colorPrimaries = colorPrimaries;
        this.colorRange = colorRange;
        this.colorSpace = colorSpace;
        this.colorTrc = colorTrc;
        this.frameRate = frameRate;
        this.hasScalingMatrix = hasScalingMatrix;
        this.height = height;
        this.level = level;
        this.profile = profile;
        this.refFrames = refFrames;
        this.scanType = scanType;
        this.streamIdentifier = streamIdentifier;
        this.width = width;
        this.displayTitle = displayTitle;
        this.extendedDisplayTitle = extendedDisplayTitle;
        this.selected = selected;
        this.channels = channels;
        this.language = language;
        this.languageTag = languageTag;
        this.languageCode = languageCode;
        this.samplingRate = samplingRate;
    }
    
    public GetMetaDataByRatingKeyStream() {
        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());
    }

    @JsonIgnore
    public Optional<Integer> id() {
        return id;
    }

    @JsonIgnore
    public Optional<Integer> streamType() {
        return streamType;
    }

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

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

    @JsonIgnore
    public Optional<Integer> index() {
        return index;
    }

    @JsonIgnore
    public Optional<Integer> bitrate() {
        return bitrate;
    }

    @JsonIgnore
    public Optional<Integer> bitDepth() {
        return bitDepth;
    }

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

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

    @JsonIgnore
    public Optional<Integer> codedHeight() {
        return codedHeight;
    }

    @JsonIgnore
    public Optional<Integer> codedWidth() {
        return codedWidth;
    }

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

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

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

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

    @JsonIgnore
    public Optional<Integer> frameRate() {
        return frameRate;
    }

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

    @JsonIgnore
    public Optional<Integer> height() {
        return height;
    }

    @JsonIgnore
    public Optional<Integer> level() {
        return level;
    }

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

    @JsonIgnore
    public Optional<Integer> refFrames() {
        return refFrames;
    }

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

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

    @JsonIgnore
    public Optional<Integer> width() {
        return width;
    }

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

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

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

    @JsonIgnore
    public Optional<Integer> channels() {
        return channels;
    }

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

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

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

    @JsonIgnore
    public Optional<Integer> samplingRate() {
        return samplingRate;
    }

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

    public GetMetaDataByRatingKeyStream withId(int id) {
        Utils.checkNotNull(id, "id");
        this.id = Optional.ofNullable(id);
        return this;
    }

    public GetMetaDataByRatingKeyStream withId(Optional<Integer> id) {
        Utils.checkNotNull(id, "id");
        this.id = id;
        return this;
    }

    public GetMetaDataByRatingKeyStream withStreamType(int streamType) {
        Utils.checkNotNull(streamType, "streamType");
        this.streamType = Optional.ofNullable(streamType);
        return this;
    }

    public GetMetaDataByRatingKeyStream withStreamType(Optional<Integer> streamType) {
        Utils.checkNotNull(streamType, "streamType");
        this.streamType = streamType;
        return this;
    }

    public GetMetaDataByRatingKeyStream withDefault(boolean default_) {
        Utils.checkNotNull(default_, "default_");
        this.default_ = Optional.ofNullable(default_);
        return this;
    }

    public GetMetaDataByRatingKeyStream withDefault(Optional<Boolean> default_) {
        Utils.checkNotNull(default_, "default_");
        this.default_ = default_;
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodec(String codec) {
        Utils.checkNotNull(codec, "codec");
        this.codec = Optional.ofNullable(codec);
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodec(Optional<String> codec) {
        Utils.checkNotNull(codec, "codec");
        this.codec = codec;
        return this;
    }

    public GetMetaDataByRatingKeyStream withIndex(int index) {
        Utils.checkNotNull(index, "index");
        this.index = Optional.ofNullable(index);
        return this;
    }

    public GetMetaDataByRatingKeyStream withIndex(Optional<Integer> index) {
        Utils.checkNotNull(index, "index");
        this.index = index;
        return this;
    }

    public GetMetaDataByRatingKeyStream withBitrate(int bitrate) {
        Utils.checkNotNull(bitrate, "bitrate");
        this.bitrate = Optional.ofNullable(bitrate);
        return this;
    }

    public GetMetaDataByRatingKeyStream withBitrate(Optional<Integer> bitrate) {
        Utils.checkNotNull(bitrate, "bitrate");
        this.bitrate = bitrate;
        return this;
    }

    public GetMetaDataByRatingKeyStream withBitDepth(int bitDepth) {
        Utils.checkNotNull(bitDepth, "bitDepth");
        this.bitDepth = Optional.ofNullable(bitDepth);
        return this;
    }

    public GetMetaDataByRatingKeyStream withBitDepth(Optional<Integer> bitDepth) {
        Utils.checkNotNull(bitDepth, "bitDepth");
        this.bitDepth = bitDepth;
        return this;
    }

    public GetMetaDataByRatingKeyStream withChromaLocation(String chromaLocation) {
        Utils.checkNotNull(chromaLocation, "chromaLocation");
        this.chromaLocation = Optional.ofNullable(chromaLocation);
        return this;
    }

    public GetMetaDataByRatingKeyStream withChromaLocation(Optional<String> chromaLocation) {
        Utils.checkNotNull(chromaLocation, "chromaLocation");
        this.chromaLocation = chromaLocation;
        return this;
    }

    public GetMetaDataByRatingKeyStream withChromaSubsampling(String chromaSubsampling) {
        Utils.checkNotNull(chromaSubsampling, "chromaSubsampling");
        this.chromaSubsampling = Optional.ofNullable(chromaSubsampling);
        return this;
    }

    public GetMetaDataByRatingKeyStream withChromaSubsampling(Optional<String> chromaSubsampling) {
        Utils.checkNotNull(chromaSubsampling, "chromaSubsampling");
        this.chromaSubsampling = chromaSubsampling;
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodedHeight(int codedHeight) {
        Utils.checkNotNull(codedHeight, "codedHeight");
        this.codedHeight = Optional.ofNullable(codedHeight);
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodedHeight(Optional<Integer> codedHeight) {
        Utils.checkNotNull(codedHeight, "codedHeight");
        this.codedHeight = codedHeight;
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodedWidth(int codedWidth) {
        Utils.checkNotNull(codedWidth, "codedWidth");
        this.codedWidth = Optional.ofNullable(codedWidth);
        return this;
    }

    public GetMetaDataByRatingKeyStream withCodedWidth(Optional<Integer> codedWidth) {
        Utils.checkNotNull(codedWidth, "codedWidth");
        this.codedWidth = codedWidth;
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorPrimaries(String colorPrimaries) {
        Utils.checkNotNull(colorPrimaries, "colorPrimaries");
        this.colorPrimaries = Optional.ofNullable(colorPrimaries);
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorPrimaries(Optional<String> colorPrimaries) {
        Utils.checkNotNull(colorPrimaries, "colorPrimaries");
        this.colorPrimaries = colorPrimaries;
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorRange(String colorRange) {
        Utils.checkNotNull(colorRange, "colorRange");
        this.colorRange = Optional.ofNullable(colorRange);
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorRange(Optional<String> colorRange) {
        Utils.checkNotNull(colorRange, "colorRange");
        this.colorRange = colorRange;
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorSpace(String colorSpace) {
        Utils.checkNotNull(colorSpace, "colorSpace");
        this.colorSpace = Optional.ofNullable(colorSpace);
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorSpace(Optional<String> colorSpace) {
        Utils.checkNotNull(colorSpace, "colorSpace");
        this.colorSpace = colorSpace;
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorTrc(String colorTrc) {
        Utils.checkNotNull(colorTrc, "colorTrc");
        this.colorTrc = Optional.ofNullable(colorTrc);
        return this;
    }

    public GetMetaDataByRatingKeyStream withColorTrc(Optional<String> colorTrc) {
        Utils.checkNotNull(colorTrc, "colorTrc");
        this.colorTrc = colorTrc;
        return this;
    }

    public GetMetaDataByRatingKeyStream withFrameRate(int frameRate) {
        Utils.checkNotNull(frameRate, "frameRate");
        this.frameRate = Optional.ofNullable(frameRate);
        return this;
    }

    public GetMetaDataByRatingKeyStream withFrameRate(Optional<Integer> frameRate) {
        Utils.checkNotNull(frameRate, "frameRate");
        this.frameRate = frameRate;
        return this;
    }

    public GetMetaDataByRatingKeyStream withHasScalingMatrix(boolean hasScalingMatrix) {
        Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix");
        this.hasScalingMatrix = Optional.ofNullable(hasScalingMatrix);
        return this;
    }

    public GetMetaDataByRatingKeyStream withHasScalingMatrix(Optional<Boolean> hasScalingMatrix) {
        Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix");
        this.hasScalingMatrix = hasScalingMatrix;
        return this;
    }

    public GetMetaDataByRatingKeyStream withHeight(int height) {
        Utils.checkNotNull(height, "height");
        this.height = Optional.ofNullable(height);
        return this;
    }

    public GetMetaDataByRatingKeyStream withHeight(Optional<Integer> height) {
        Utils.checkNotNull(height, "height");
        this.height = height;
        return this;
    }

    public GetMetaDataByRatingKeyStream withLevel(int level) {
        Utils.checkNotNull(level, "level");
        this.level = Optional.ofNullable(level);
        return this;
    }

    public GetMetaDataByRatingKeyStream withLevel(Optional<Integer> level) {
        Utils.checkNotNull(level, "level");
        this.level = level;
        return this;
    }

    public GetMetaDataByRatingKeyStream withProfile(String profile) {
        Utils.checkNotNull(profile, "profile");
        this.profile = Optional.ofNullable(profile);
        return this;
    }

    public GetMetaDataByRatingKeyStream withProfile(Optional<String> profile) {
        Utils.checkNotNull(profile, "profile");
        this.profile = profile;
        return this;
    }

    public GetMetaDataByRatingKeyStream withRefFrames(int refFrames) {
        Utils.checkNotNull(refFrames, "refFrames");
        this.refFrames = Optional.ofNullable(refFrames);
        return this;
    }

    public GetMetaDataByRatingKeyStream withRefFrames(Optional<Integer> refFrames) {
        Utils.checkNotNull(refFrames, "refFrames");
        this.refFrames = refFrames;
        return this;
    }

    public GetMetaDataByRatingKeyStream withScanType(String scanType) {
        Utils.checkNotNull(scanType, "scanType");
        this.scanType = Optional.ofNullable(scanType);
        return this;
    }

    public GetMetaDataByRatingKeyStream withScanType(Optional<String> scanType) {
        Utils.checkNotNull(scanType, "scanType");
        this.scanType = scanType;
        return this;
    }

    public GetMetaDataByRatingKeyStream withStreamIdentifier(String streamIdentifier) {
        Utils.checkNotNull(streamIdentifier, "streamIdentifier");
        this.streamIdentifier = Optional.ofNullable(streamIdentifier);
        return this;
    }

    public GetMetaDataByRatingKeyStream withStreamIdentifier(Optional<String> streamIdentifier) {
        Utils.checkNotNull(streamIdentifier, "streamIdentifier");
        this.streamIdentifier = streamIdentifier;
        return this;
    }

    public GetMetaDataByRatingKeyStream withWidth(int width) {
        Utils.checkNotNull(width, "width");
        this.width = Optional.ofNullable(width);
        return this;
    }

    public GetMetaDataByRatingKeyStream withWidth(Optional<Integer> width) {
        Utils.checkNotNull(width, "width");
        this.width = width;
        return this;
    }

    public GetMetaDataByRatingKeyStream withDisplayTitle(String displayTitle) {
        Utils.checkNotNull(displayTitle, "displayTitle");
        this.displayTitle = Optional.ofNullable(displayTitle);
        return this;
    }

    public GetMetaDataByRatingKeyStream withDisplayTitle(Optional<String> displayTitle) {
        Utils.checkNotNull(displayTitle, "displayTitle");
        this.displayTitle = displayTitle;
        return this;
    }

    public GetMetaDataByRatingKeyStream withExtendedDisplayTitle(String extendedDisplayTitle) {
        Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle");
        this.extendedDisplayTitle = Optional.ofNullable(extendedDisplayTitle);
        return this;
    }

    public GetMetaDataByRatingKeyStream withExtendedDisplayTitle(Optional<String> extendedDisplayTitle) {
        Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle");
        this.extendedDisplayTitle = extendedDisplayTitle;
        return this;
    }

    public GetMetaDataByRatingKeyStream withSelected(boolean selected) {
        Utils.checkNotNull(selected, "selected");
        this.selected = Optional.ofNullable(selected);
        return this;
    }

    public GetMetaDataByRatingKeyStream withSelected(Optional<Boolean> selected) {
        Utils.checkNotNull(selected, "selected");
        this.selected = selected;
        return this;
    }

    public GetMetaDataByRatingKeyStream withChannels(int channels) {
        Utils.checkNotNull(channels, "channels");
        this.channels = Optional.ofNullable(channels);
        return this;
    }

    public GetMetaDataByRatingKeyStream withChannels(Optional<Integer> channels) {
        Utils.checkNotNull(channels, "channels");
        this.channels = channels;
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguage(String language) {
        Utils.checkNotNull(language, "language");
        this.language = Optional.ofNullable(language);
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguage(Optional<String> language) {
        Utils.checkNotNull(language, "language");
        this.language = language;
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguageTag(String languageTag) {
        Utils.checkNotNull(languageTag, "languageTag");
        this.languageTag = Optional.ofNullable(languageTag);
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguageTag(Optional<String> languageTag) {
        Utils.checkNotNull(languageTag, "languageTag");
        this.languageTag = languageTag;
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguageCode(String languageCode) {
        Utils.checkNotNull(languageCode, "languageCode");
        this.languageCode = Optional.ofNullable(languageCode);
        return this;
    }

    public GetMetaDataByRatingKeyStream withLanguageCode(Optional<String> languageCode) {
        Utils.checkNotNull(languageCode, "languageCode");
        this.languageCode = languageCode;
        return this;
    }

    public GetMetaDataByRatingKeyStream withSamplingRate(int samplingRate) {
        Utils.checkNotNull(samplingRate, "samplingRate");
        this.samplingRate = Optional.ofNullable(samplingRate);
        return this;
    }

    public GetMetaDataByRatingKeyStream withSamplingRate(Optional<Integer> samplingRate) {
        Utils.checkNotNull(samplingRate, "samplingRate");
        this.samplingRate = samplingRate;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetMetaDataByRatingKeyStream other = (GetMetaDataByRatingKeyStream) o;
        return 
            Objects.deepEquals(this.id, other.id) &&
            Objects.deepEquals(this.streamType, other.streamType) &&
            Objects.deepEquals(this.default_, other.default_) &&
            Objects.deepEquals(this.codec, other.codec) &&
            Objects.deepEquals(this.index, other.index) &&
            Objects.deepEquals(this.bitrate, other.bitrate) &&
            Objects.deepEquals(this.bitDepth, other.bitDepth) &&
            Objects.deepEquals(this.chromaLocation, other.chromaLocation) &&
            Objects.deepEquals(this.chromaSubsampling, other.chromaSubsampling) &&
            Objects.deepEquals(this.codedHeight, other.codedHeight) &&
            Objects.deepEquals(this.codedWidth, other.codedWidth) &&
            Objects.deepEquals(this.colorPrimaries, other.colorPrimaries) &&
            Objects.deepEquals(this.colorRange, other.colorRange) &&
            Objects.deepEquals(this.colorSpace, other.colorSpace) &&
            Objects.deepEquals(this.colorTrc, other.colorTrc) &&
            Objects.deepEquals(this.frameRate, other.frameRate) &&
            Objects.deepEquals(this.hasScalingMatrix, other.hasScalingMatrix) &&
            Objects.deepEquals(this.height, other.height) &&
            Objects.deepEquals(this.level, other.level) &&
            Objects.deepEquals(this.profile, other.profile) &&
            Objects.deepEquals(this.refFrames, other.refFrames) &&
            Objects.deepEquals(this.scanType, other.scanType) &&
            Objects.deepEquals(this.streamIdentifier, other.streamIdentifier) &&
            Objects.deepEquals(this.width, other.width) &&
            Objects.deepEquals(this.displayTitle, other.displayTitle) &&
            Objects.deepEquals(this.extendedDisplayTitle, other.extendedDisplayTitle) &&
            Objects.deepEquals(this.selected, other.selected) &&
            Objects.deepEquals(this.channels, other.channels) &&
            Objects.deepEquals(this.language, other.language) &&
            Objects.deepEquals(this.languageTag, other.languageTag) &&
            Objects.deepEquals(this.languageCode, other.languageCode) &&
            Objects.deepEquals(this.samplingRate, other.samplingRate);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            id,
            streamType,
            default_,
            codec,
            index,
            bitrate,
            bitDepth,
            chromaLocation,
            chromaSubsampling,
            codedHeight,
            codedWidth,
            colorPrimaries,
            colorRange,
            colorSpace,
            colorTrc,
            frameRate,
            hasScalingMatrix,
            height,
            level,
            profile,
            refFrames,
            scanType,
            streamIdentifier,
            width,
            displayTitle,
            extendedDisplayTitle,
            selected,
            channels,
            language,
            languageTag,
            languageCode,
            samplingRate);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetMetaDataByRatingKeyStream.class,
                "id", id,
                "streamType", streamType,
                "default_", default_,
                "codec", codec,
                "index", index,
                "bitrate", bitrate,
                "bitDepth", bitDepth,
                "chromaLocation", chromaLocation,
                "chromaSubsampling", chromaSubsampling,
                "codedHeight", codedHeight,
                "codedWidth", codedWidth,
                "colorPrimaries", colorPrimaries,
                "colorRange", colorRange,
                "colorSpace", colorSpace,
                "colorTrc", colorTrc,
                "frameRate", frameRate,
                "hasScalingMatrix", hasScalingMatrix,
                "height", height,
                "level", level,
                "profile", profile,
                "refFrames", refFrames,
                "scanType", scanType,
                "streamIdentifier", streamIdentifier,
                "width", width,
                "displayTitle", displayTitle,
                "extendedDisplayTitle", extendedDisplayTitle,
                "selected", selected,
                "channels", channels,
                "language", language,
                "languageTag", languageTag,
                "languageCode", languageCode,
                "samplingRate", samplingRate);
    }
    
    public final static class Builder {
 
        private Optional<Integer> id = Optional.empty();
 
        private Optional<Integer> streamType = Optional.empty();
 
        private Optional<Boolean> default_ = Optional.empty();
 
        private Optional<String> codec = Optional.empty();
 
        private Optional<Integer> index = Optional.empty();
 
        private Optional<Integer> bitrate = Optional.empty();
 
        private Optional<Integer> bitDepth = Optional.empty();
 
        private Optional<String> chromaLocation = Optional.empty();
 
        private Optional<String> chromaSubsampling = Optional.empty();
 
        private Optional<Integer> codedHeight = Optional.empty();
 
        private Optional<Integer> codedWidth = Optional.empty();
 
        private Optional<String> colorPrimaries = Optional.empty();
 
        private Optional<String> colorRange = Optional.empty();
 
        private Optional<String> colorSpace = Optional.empty();
 
        private Optional<String> colorTrc = Optional.empty();
 
        private Optional<Integer> frameRate = Optional.empty();
 
        private Optional<Boolean> hasScalingMatrix = Optional.empty();
 
        private Optional<Integer> height = Optional.empty();
 
        private Optional<Integer> level = Optional.empty();
 
        private Optional<String> profile = Optional.empty();
 
        private Optional<Integer> refFrames = Optional.empty();
 
        private Optional<String> scanType = Optional.empty();
 
        private Optional<String> streamIdentifier = Optional.empty();
 
        private Optional<Integer> width = Optional.empty();
 
        private Optional<String> displayTitle = Optional.empty();
 
        private Optional<String> extendedDisplayTitle = Optional.empty();
 
        private Optional<Boolean> selected = Optional.empty();
 
        private Optional<Integer> channels = Optional.empty();
 
        private Optional<String> language = Optional.empty();
 
        private Optional<String> languageTag = Optional.empty();
 
        private Optional<String> languageCode = Optional.empty();
 
        private Optional<Integer> samplingRate = Optional.empty();  
        
        private Builder() {
          // force use of static builder() method
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        public Builder samplingRate(Optional<Integer> samplingRate) {
            Utils.checkNotNull(samplingRate, "samplingRate");
            this.samplingRate = samplingRate;
            return this;
        }
        
        public GetMetaDataByRatingKeyStream build() {
            return new GetMetaDataByRatingKeyStream(
                id,
                streamType,
                default_,
                codec,
                index,
                bitrate,
                bitDepth,
                chromaLocation,
                chromaSubsampling,
                codedHeight,
                codedWidth,
                colorPrimaries,
                colorRange,
                colorSpace,
                colorTrc,
                frameRate,
                hasScalingMatrix,
                height,
                level,
                profile,
                refFrames,
                scanType,
                streamIdentifier,
                width,
                displayTitle,
                extendedDisplayTitle,
                selected,
                channels,
                language,
                languageTag,
                languageCode,
                samplingRate);
        }
    }
}

