/* tslint:disable */
/* eslint-disable */
/**
 * Jellyfin API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 10.8.9
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import type { CodecProfile } from './CodecProfile';
import {
    CodecProfileFromJSON,
    CodecProfileFromJSONTyped,
    CodecProfileToJSON,
} from './CodecProfile';
import type { ContainerProfile } from './ContainerProfile';
import {
    ContainerProfileFromJSON,
    ContainerProfileFromJSONTyped,
    ContainerProfileToJSON,
} from './ContainerProfile';
import type { DeviceProfileIdentification } from './DeviceProfileIdentification';
import {
    DeviceProfileIdentificationFromJSON,
    DeviceProfileIdentificationFromJSONTyped,
    DeviceProfileIdentificationToJSON,
} from './DeviceProfileIdentification';
import type { DirectPlayProfile } from './DirectPlayProfile';
import {
    DirectPlayProfileFromJSON,
    DirectPlayProfileFromJSONTyped,
    DirectPlayProfileToJSON,
} from './DirectPlayProfile';
import type { ResponseProfile } from './ResponseProfile';
import {
    ResponseProfileFromJSON,
    ResponseProfileFromJSONTyped,
    ResponseProfileToJSON,
} from './ResponseProfile';
import type { SubtitleProfile } from './SubtitleProfile';
import {
    SubtitleProfileFromJSON,
    SubtitleProfileFromJSONTyped,
    SubtitleProfileToJSON,
} from './SubtitleProfile';
import type { TranscodingProfile } from './TranscodingProfile';
import {
    TranscodingProfileFromJSON,
    TranscodingProfileFromJSONTyped,
    TranscodingProfileToJSON,
} from './TranscodingProfile';
import type { XmlAttribute } from './XmlAttribute';
import {
    XmlAttributeFromJSON,
    XmlAttributeFromJSONTyped,
    XmlAttributeToJSON,
} from './XmlAttribute';

/**
 * Gets or sets the device profile.
 * @export
 * @interface ClientCapabilitiesDtoDeviceProfile
 */
export interface ClientCapabilitiesDtoDeviceProfile {
    /**
     * Gets or sets the name of this device profile.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    name?: string | null;
    /**
     * Gets or sets the Id.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    id?: string | null;
    /**
     * 
     * @type {DeviceProfileIdentification}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    identification?: DeviceProfileIdentification | null;
    /**
     * Gets or sets the friendly name of the device profile, which can be shown to users.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    friendlyName?: string | null;
    /**
     * Gets or sets the manufacturer of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    manufacturer?: string | null;
    /**
     * Gets or sets an url for the manufacturer of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    manufacturerUrl?: string | null;
    /**
     * Gets or sets the model name of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    modelName?: string | null;
    /**
     * Gets or sets the model description of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    modelDescription?: string | null;
    /**
     * Gets or sets the model number of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    modelNumber?: string | null;
    /**
     * Gets or sets the ModelUrl.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    modelUrl?: string | null;
    /**
     * Gets or sets the serial number of the device which this profile represents.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    serialNumber?: string | null;
    /**
     * Gets or sets a value indicating whether EnableAlbumArtInDidl.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    enableAlbumArtInDidl?: boolean;
    /**
     * Gets or sets a value indicating whether EnableSingleAlbumArtLimit.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    enableSingleAlbumArtLimit?: boolean;
    /**
     * Gets or sets a value indicating whether EnableSingleSubtitleLimit.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    enableSingleSubtitleLimit?: boolean;
    /**
     * Gets or sets the SupportedMediaTypes.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    supportedMediaTypes?: string;
    /**
     * Gets or sets the UserId.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    userId?: string | null;
    /**
     * Gets or sets the AlbumArtPn.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    albumArtPn?: string | null;
    /**
     * Gets or sets the MaxAlbumArtWidth.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxAlbumArtWidth?: number | null;
    /**
     * Gets or sets the MaxAlbumArtHeight.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxAlbumArtHeight?: number | null;
    /**
     * Gets or sets the maximum allowed width of embedded icons.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxIconWidth?: number | null;
    /**
     * Gets or sets the maximum allowed height of embedded icons.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxIconHeight?: number | null;
    /**
     * Gets or sets the maximum allowed bitrate for all streamed content.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxStreamingBitrate?: number | null;
    /**
     * Gets or sets the maximum allowed bitrate for statically streamed content (= direct played files).
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxStaticBitrate?: number | null;
    /**
     * Gets or sets the maximum allowed bitrate for transcoded music streams.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    musicStreamingTranscodingBitrate?: number | null;
    /**
     * Gets or sets the maximum allowed bitrate for statically streamed (= direct played) music files.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    maxStaticMusicBitrate?: number | null;
    /**
     * Gets or sets the content of the aggregationFlags element in the urn:schemas-sonycom:av namespace.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    sonyAggregationFlags?: string | null;
    /**
     * Gets or sets the ProtocolInfo.
     * @type {string}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    protocolInfo?: string | null;
    /**
     * Gets or sets the TimelineOffsetSeconds.
     * @type {number}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    timelineOffsetSeconds?: number;
    /**
     * Gets or sets a value indicating whether RequiresPlainVideoItems.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    requiresPlainVideoItems?: boolean;
    /**
     * Gets or sets a value indicating whether RequiresPlainFolders.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    requiresPlainFolders?: boolean;
    /**
     * Gets or sets a value indicating whether EnableMSMediaReceiverRegistrar.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    enableMSMediaReceiverRegistrar?: boolean;
    /**
     * Gets or sets a value indicating whether IgnoreTranscodeByteRangeRequests.
     * @type {boolean}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    ignoreTranscodeByteRangeRequests?: boolean;
    /**
     * Gets or sets the XmlRootAttributes.
     * @type {Array<XmlAttribute>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    xmlRootAttributes?: Array<XmlAttribute>;
    /**
     * Gets or sets the direct play profiles.
     * @type {Array<DirectPlayProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    directPlayProfiles?: Array<DirectPlayProfile>;
    /**
     * Gets or sets the transcoding profiles.
     * @type {Array<TranscodingProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    transcodingProfiles?: Array<TranscodingProfile>;
    /**
     * Gets or sets the container profiles.
     * @type {Array<ContainerProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    containerProfiles?: Array<ContainerProfile>;
    /**
     * Gets or sets the codec profiles.
     * @type {Array<CodecProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    codecProfiles?: Array<CodecProfile>;
    /**
     * Gets or sets the ResponseProfiles.
     * @type {Array<ResponseProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    responseProfiles?: Array<ResponseProfile>;
    /**
     * Gets or sets the subtitle profiles.
     * @type {Array<SubtitleProfile>}
     * @memberof ClientCapabilitiesDtoDeviceProfile
     */
    subtitleProfiles?: Array<SubtitleProfile>;
}

/**
 * Check if a given object implements the ClientCapabilitiesDtoDeviceProfile interface.
 */
export function instanceOfClientCapabilitiesDtoDeviceProfile(value: object): boolean {
    let isInstance = true;

    return isInstance;
}

export function ClientCapabilitiesDtoDeviceProfileFromJSON(json: any): ClientCapabilitiesDtoDeviceProfile {
    return ClientCapabilitiesDtoDeviceProfileFromJSONTyped(json, false);
}

export function ClientCapabilitiesDtoDeviceProfileFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClientCapabilitiesDtoDeviceProfile {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'name': !exists(json, 'Name') ? undefined : json['Name'],
        'id': !exists(json, 'Id') ? undefined : json['Id'],
        'identification': !exists(json, 'Identification') ? undefined : DeviceProfileIdentificationFromJSON(json['Identification']),
        'friendlyName': !exists(json, 'FriendlyName') ? undefined : json['FriendlyName'],
        'manufacturer': !exists(json, 'Manufacturer') ? undefined : json['Manufacturer'],
        'manufacturerUrl': !exists(json, 'ManufacturerUrl') ? undefined : json['ManufacturerUrl'],
        'modelName': !exists(json, 'ModelName') ? undefined : json['ModelName'],
        'modelDescription': !exists(json, 'ModelDescription') ? undefined : json['ModelDescription'],
        'modelNumber': !exists(json, 'ModelNumber') ? undefined : json['ModelNumber'],
        'modelUrl': !exists(json, 'ModelUrl') ? undefined : json['ModelUrl'],
        'serialNumber': !exists(json, 'SerialNumber') ? undefined : json['SerialNumber'],
        'enableAlbumArtInDidl': !exists(json, 'EnableAlbumArtInDidl') ? undefined : json['EnableAlbumArtInDidl'],
        'enableSingleAlbumArtLimit': !exists(json, 'EnableSingleAlbumArtLimit') ? undefined : json['EnableSingleAlbumArtLimit'],
        'enableSingleSubtitleLimit': !exists(json, 'EnableSingleSubtitleLimit') ? undefined : json['EnableSingleSubtitleLimit'],
        'supportedMediaTypes': !exists(json, 'SupportedMediaTypes') ? undefined : json['SupportedMediaTypes'],
        'userId': !exists(json, 'UserId') ? undefined : json['UserId'],
        'albumArtPn': !exists(json, 'AlbumArtPn') ? undefined : json['AlbumArtPn'],
        'maxAlbumArtWidth': !exists(json, 'MaxAlbumArtWidth') ? undefined : json['MaxAlbumArtWidth'],
        'maxAlbumArtHeight': !exists(json, 'MaxAlbumArtHeight') ? undefined : json['MaxAlbumArtHeight'],
        'maxIconWidth': !exists(json, 'MaxIconWidth') ? undefined : json['MaxIconWidth'],
        'maxIconHeight': !exists(json, 'MaxIconHeight') ? undefined : json['MaxIconHeight'],
        'maxStreamingBitrate': !exists(json, 'MaxStreamingBitrate') ? undefined : json['MaxStreamingBitrate'],
        'maxStaticBitrate': !exists(json, 'MaxStaticBitrate') ? undefined : json['MaxStaticBitrate'],
        'musicStreamingTranscodingBitrate': !exists(json, 'MusicStreamingTranscodingBitrate') ? undefined : json['MusicStreamingTranscodingBitrate'],
        'maxStaticMusicBitrate': !exists(json, 'MaxStaticMusicBitrate') ? undefined : json['MaxStaticMusicBitrate'],
        'sonyAggregationFlags': !exists(json, 'SonyAggregationFlags') ? undefined : json['SonyAggregationFlags'],
        'protocolInfo': !exists(json, 'ProtocolInfo') ? undefined : json['ProtocolInfo'],
        'timelineOffsetSeconds': !exists(json, 'TimelineOffsetSeconds') ? undefined : json['TimelineOffsetSeconds'],
        'requiresPlainVideoItems': !exists(json, 'RequiresPlainVideoItems') ? undefined : json['RequiresPlainVideoItems'],
        'requiresPlainFolders': !exists(json, 'RequiresPlainFolders') ? undefined : json['RequiresPlainFolders'],
        'enableMSMediaReceiverRegistrar': !exists(json, 'EnableMSMediaReceiverRegistrar') ? undefined : json['EnableMSMediaReceiverRegistrar'],
        'ignoreTranscodeByteRangeRequests': !exists(json, 'IgnoreTranscodeByteRangeRequests') ? undefined : json['IgnoreTranscodeByteRangeRequests'],
        'xmlRootAttributes': !exists(json, 'XmlRootAttributes') ? undefined : ((json['XmlRootAttributes'] as Array<any>).map(XmlAttributeFromJSON)),
        'directPlayProfiles': !exists(json, 'DirectPlayProfiles') ? undefined : ((json['DirectPlayProfiles'] as Array<any>).map(DirectPlayProfileFromJSON)),
        'transcodingProfiles': !exists(json, 'TranscodingProfiles') ? undefined : ((json['TranscodingProfiles'] as Array<any>).map(TranscodingProfileFromJSON)),
        'containerProfiles': !exists(json, 'ContainerProfiles') ? undefined : ((json['ContainerProfiles'] as Array<any>).map(ContainerProfileFromJSON)),
        'codecProfiles': !exists(json, 'CodecProfiles') ? undefined : ((json['CodecProfiles'] as Array<any>).map(CodecProfileFromJSON)),
        'responseProfiles': !exists(json, 'ResponseProfiles') ? undefined : ((json['ResponseProfiles'] as Array<any>).map(ResponseProfileFromJSON)),
        'subtitleProfiles': !exists(json, 'SubtitleProfiles') ? undefined : ((json['SubtitleProfiles'] as Array<any>).map(SubtitleProfileFromJSON)),
    };
}

export function ClientCapabilitiesDtoDeviceProfileToJSON(value?: ClientCapabilitiesDtoDeviceProfile | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'Name': value.name,
        'Id': value.id,
        'Identification': DeviceProfileIdentificationToJSON(value.identification),
        'FriendlyName': value.friendlyName,
        'Manufacturer': value.manufacturer,
        'ManufacturerUrl': value.manufacturerUrl,
        'ModelName': value.modelName,
        'ModelDescription': value.modelDescription,
        'ModelNumber': value.modelNumber,
        'ModelUrl': value.modelUrl,
        'SerialNumber': value.serialNumber,
        'EnableAlbumArtInDidl': value.enableAlbumArtInDidl,
        'EnableSingleAlbumArtLimit': value.enableSingleAlbumArtLimit,
        'EnableSingleSubtitleLimit': value.enableSingleSubtitleLimit,
        'SupportedMediaTypes': value.supportedMediaTypes,
        'UserId': value.userId,
        'AlbumArtPn': value.albumArtPn,
        'MaxAlbumArtWidth': value.maxAlbumArtWidth,
        'MaxAlbumArtHeight': value.maxAlbumArtHeight,
        'MaxIconWidth': value.maxIconWidth,
        'MaxIconHeight': value.maxIconHeight,
        'MaxStreamingBitrate': value.maxStreamingBitrate,
        'MaxStaticBitrate': value.maxStaticBitrate,
        'MusicStreamingTranscodingBitrate': value.musicStreamingTranscodingBitrate,
        'MaxStaticMusicBitrate': value.maxStaticMusicBitrate,
        'SonyAggregationFlags': value.sonyAggregationFlags,
        'ProtocolInfo': value.protocolInfo,
        'TimelineOffsetSeconds': value.timelineOffsetSeconds,
        'RequiresPlainVideoItems': value.requiresPlainVideoItems,
        'RequiresPlainFolders': value.requiresPlainFolders,
        'EnableMSMediaReceiverRegistrar': value.enableMSMediaReceiverRegistrar,
        'IgnoreTranscodeByteRangeRequests': value.ignoreTranscodeByteRangeRequests,
        'XmlRootAttributes': value.xmlRootAttributes === undefined ? undefined : ((value.xmlRootAttributes as Array<any>).map(XmlAttributeToJSON)),
        'DirectPlayProfiles': value.directPlayProfiles === undefined ? undefined : ((value.directPlayProfiles as Array<any>).map(DirectPlayProfileToJSON)),
        'TranscodingProfiles': value.transcodingProfiles === undefined ? undefined : ((value.transcodingProfiles as Array<any>).map(TranscodingProfileToJSON)),
        'ContainerProfiles': value.containerProfiles === undefined ? undefined : ((value.containerProfiles as Array<any>).map(ContainerProfileToJSON)),
        'CodecProfiles': value.codecProfiles === undefined ? undefined : ((value.codecProfiles as Array<any>).map(CodecProfileToJSON)),
        'ResponseProfiles': value.responseProfiles === undefined ? undefined : ((value.responseProfiles as Array<any>).map(ResponseProfileToJSON)),
        'SubtitleProfiles': value.subtitleProfiles === undefined ? undefined : ((value.subtitleProfiles as Array<any>).map(SubtitleProfileToJSON)),
    };
}

