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


public class GetOnDeckStream {

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

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("streamType")
    private Optional<Double> 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<Double> index;

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

    @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("bitDepth")
    private Optional<Double> 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<Double> codedHeight;

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

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

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

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

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

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

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

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

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

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

    @JsonCreator
    public GetOnDeckStream(
            @JsonProperty("id") Optional<Double> id,
            @JsonProperty("streamType") Optional<Double> streamType,
            @JsonProperty("default") Optional<Boolean> default_,
            @JsonProperty("codec") Optional<String> codec,
            @JsonProperty("index") Optional<Double> index,
            @JsonProperty("bitrate") Optional<Double> bitrate,
            @JsonProperty("language") Optional<String> language,
            @JsonProperty("languageTag") Optional<String> languageTag,
            @JsonProperty("languageCode") Optional<String> languageCode,
            @JsonProperty("bitDepth") Optional<Double> bitDepth,
            @JsonProperty("chromaLocation") Optional<String> chromaLocation,
            @JsonProperty("chromaSubsampling") Optional<String> chromaSubsampling,
            @JsonProperty("codedHeight") Optional<Double> codedHeight,
            @JsonProperty("codedWidth") Optional<Double> codedWidth,
            @JsonProperty("colorRange") Optional<String> colorRange,
            @JsonProperty("frameRate") Optional<Double> frameRate,
            @JsonProperty("height") Optional<Double> height,
            @JsonProperty("level") Optional<Double> level,
            @JsonProperty("profile") Optional<String> profile,
            @JsonProperty("refFrames") Optional<Double> refFrames,
            @JsonProperty("width") Optional<Double> width,
            @JsonProperty("displayTitle") Optional<String> displayTitle,
            @JsonProperty("extendedDisplayTitle") Optional<String> extendedDisplayTitle) {
        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(language, "language");
        Utils.checkNotNull(languageTag, "languageTag");
        Utils.checkNotNull(languageCode, "languageCode");
        Utils.checkNotNull(bitDepth, "bitDepth");
        Utils.checkNotNull(chromaLocation, "chromaLocation");
        Utils.checkNotNull(chromaSubsampling, "chromaSubsampling");
        Utils.checkNotNull(codedHeight, "codedHeight");
        Utils.checkNotNull(codedWidth, "codedWidth");
        Utils.checkNotNull(colorRange, "colorRange");
        Utils.checkNotNull(frameRate, "frameRate");
        Utils.checkNotNull(height, "height");
        Utils.checkNotNull(level, "level");
        Utils.checkNotNull(profile, "profile");
        Utils.checkNotNull(refFrames, "refFrames");
        Utils.checkNotNull(width, "width");
        Utils.checkNotNull(displayTitle, "displayTitle");
        Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle");
        this.id = id;
        this.streamType = streamType;
        this.default_ = default_;
        this.codec = codec;
        this.index = index;
        this.bitrate = bitrate;
        this.language = language;
        this.languageTag = languageTag;
        this.languageCode = languageCode;
        this.bitDepth = bitDepth;
        this.chromaLocation = chromaLocation;
        this.chromaSubsampling = chromaSubsampling;
        this.codedHeight = codedHeight;
        this.codedWidth = codedWidth;
        this.colorRange = colorRange;
        this.frameRate = frameRate;
        this.height = height;
        this.level = level;
        this.profile = profile;
        this.refFrames = refFrames;
        this.width = width;
        this.displayTitle = displayTitle;
        this.extendedDisplayTitle = extendedDisplayTitle;
    }
    
    public GetOnDeckStream() {
        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());
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    public GetOnDeckStream withExtendedDisplayTitle(Optional<String> extendedDisplayTitle) {
        Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle");
        this.extendedDisplayTitle = extendedDisplayTitle;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetOnDeckStream other = (GetOnDeckStream) 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.language, other.language) &&
            Objects.deepEquals(this.languageTag, other.languageTag) &&
            Objects.deepEquals(this.languageCode, other.languageCode) &&
            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.colorRange, other.colorRange) &&
            Objects.deepEquals(this.frameRate, other.frameRate) &&
            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.width, other.width) &&
            Objects.deepEquals(this.displayTitle, other.displayTitle) &&
            Objects.deepEquals(this.extendedDisplayTitle, other.extendedDisplayTitle);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            id,
            streamType,
            default_,
            codec,
            index,
            bitrate,
            language,
            languageTag,
            languageCode,
            bitDepth,
            chromaLocation,
            chromaSubsampling,
            codedHeight,
            codedWidth,
            colorRange,
            frameRate,
            height,
            level,
            profile,
            refFrames,
            width,
            displayTitle,
            extendedDisplayTitle);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetOnDeckStream.class,
                "id", id,
                "streamType", streamType,
                "default_", default_,
                "codec", codec,
                "index", index,
                "bitrate", bitrate,
                "language", language,
                "languageTag", languageTag,
                "languageCode", languageCode,
                "bitDepth", bitDepth,
                "chromaLocation", chromaLocation,
                "chromaSubsampling", chromaSubsampling,
                "codedHeight", codedHeight,
                "codedWidth", codedWidth,
                "colorRange", colorRange,
                "frameRate", frameRate,
                "height", height,
                "level", level,
                "profile", profile,
                "refFrames", refFrames,
                "width", width,
                "displayTitle", displayTitle,
                "extendedDisplayTitle", extendedDisplayTitle);
    }
    
    public final static class Builder {
 
        private Optional<Double> id = Optional.empty();
 
        private Optional<Double> streamType = Optional.empty();
 
        private Optional<Boolean> default_ = Optional.empty();
 
        private Optional<String> codec = Optional.empty();
 
        private Optional<Double> index = Optional.empty();
 
        private Optional<Double> bitrate = Optional.empty();
 
        private Optional<String> language = Optional.empty();
 
        private Optional<String> languageTag = Optional.empty();
 
        private Optional<String> languageCode = Optional.empty();
 
        private Optional<Double> bitDepth = Optional.empty();
 
        private Optional<String> chromaLocation = Optional.empty();
 
        private Optional<String> chromaSubsampling = Optional.empty();
 
        private Optional<Double> codedHeight = Optional.empty();
 
        private Optional<Double> codedWidth = Optional.empty();
 
        private Optional<String> colorRange = Optional.empty();
 
        private Optional<Double> frameRate = Optional.empty();
 
        private Optional<Double> height = Optional.empty();
 
        private Optional<Double> level = Optional.empty();
 
        private Optional<String> profile = Optional.empty();
 
        private Optional<Double> refFrames = Optional.empty();
 
        private Optional<Double> width = Optional.empty();
 
        private Optional<String> displayTitle = Optional.empty();
 
        private Optional<String> extendedDisplayTitle = Optional.empty();  
        
        private Builder() {
          // force use of static builder() method
        }

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

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

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

        public Builder streamType(Optional<Double> 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(double index) {
            Utils.checkNotNull(index, "index");
            this.index = Optional.ofNullable(index);
            return this;
        }

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

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

        public Builder bitrate(Optional<Double> bitrate) {
            Utils.checkNotNull(bitrate, "bitrate");
            this.bitrate = bitrate;
            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 bitDepth(double bitDepth) {
            Utils.checkNotNull(bitDepth, "bitDepth");
            this.bitDepth = Optional.ofNullable(bitDepth);
            return this;
        }

        public Builder bitDepth(Optional<Double> 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(double codedHeight) {
            Utils.checkNotNull(codedHeight, "codedHeight");
            this.codedHeight = Optional.ofNullable(codedHeight);
            return this;
        }

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

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

        public Builder codedWidth(Optional<Double> codedWidth) {
            Utils.checkNotNull(codedWidth, "codedWidth");
            this.codedWidth = codedWidth;
            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 frameRate(double frameRate) {
            Utils.checkNotNull(frameRate, "frameRate");
            this.frameRate = Optional.ofNullable(frameRate);
            return this;
        }

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

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

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

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

        public Builder level(Optional<Double> 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(double refFrames) {
            Utils.checkNotNull(refFrames, "refFrames");
            this.refFrames = Optional.ofNullable(refFrames);
            return this;
        }

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

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

        public Builder width(Optional<Double> 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 GetOnDeckStream build() {
            return new GetOnDeckStream(
                id,
                streamType,
                default_,
                codec,
                index,
                bitrate,
                language,
                languageTag,
                languageCode,
                bitDepth,
                chromaLocation,
                chromaSubsampling,
                codedHeight,
                codedWidth,
                colorRange,
                frameRate,
                height,
                level,
                profile,
                refFrames,
                width,
                displayTitle,
                extendedDisplayTitle);
        }
    }
}

