/* 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 { ClientCapabilitiesDtoDeviceProfile } from './ClientCapabilitiesDtoDeviceProfile';
import {
    ClientCapabilitiesDtoDeviceProfileFromJSON,
    ClientCapabilitiesDtoDeviceProfileFromJSONTyped,
    ClientCapabilitiesDtoDeviceProfileToJSON,
} from './ClientCapabilitiesDtoDeviceProfile';
import type { GeneralCommandType } from './GeneralCommandType';
import {
    GeneralCommandTypeFromJSON,
    GeneralCommandTypeFromJSONTyped,
    GeneralCommandTypeToJSON,
} from './GeneralCommandType';

/**
 * Client capabilities dto.
 * @export
 * @interface ClientCapabilitiesDto
 */
export interface ClientCapabilitiesDto {
    /**
     * Gets or sets the list of playable media types.
     * @type {Array<string>}
     * @memberof ClientCapabilitiesDto
     */
    playableMediaTypes?: Array<string>;
    /**
     * Gets or sets the list of supported commands.
     * @type {Array<GeneralCommandType>}
     * @memberof ClientCapabilitiesDto
     */
    supportedCommands?: Array<GeneralCommandType>;
    /**
     * Gets or sets a value indicating whether session supports media control.
     * @type {boolean}
     * @memberof ClientCapabilitiesDto
     */
    supportsMediaControl?: boolean;
    /**
     * Gets or sets a value indicating whether session supports content uploading.
     * @type {boolean}
     * @memberof ClientCapabilitiesDto
     */
    supportsContentUploading?: boolean;
    /**
     * Gets or sets the message callback url.
     * @type {string}
     * @memberof ClientCapabilitiesDto
     */
    messageCallbackUrl?: string | null;
    /**
     * Gets or sets a value indicating whether session supports a persistent identifier.
     * @type {boolean}
     * @memberof ClientCapabilitiesDto
     */
    supportsPersistentIdentifier?: boolean;
    /**
     * Gets or sets a value indicating whether session supports sync.
     * @type {boolean}
     * @memberof ClientCapabilitiesDto
     */
    supportsSync?: boolean;
    /**
     * 
     * @type {ClientCapabilitiesDtoDeviceProfile}
     * @memberof ClientCapabilitiesDto
     */
    deviceProfile?: ClientCapabilitiesDtoDeviceProfile | null;
    /**
     * Gets or sets the app store url.
     * @type {string}
     * @memberof ClientCapabilitiesDto
     */
    appStoreUrl?: string | null;
    /**
     * Gets or sets the icon url.
     * @type {string}
     * @memberof ClientCapabilitiesDto
     */
    iconUrl?: string | null;
}

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

    return isInstance;
}

export function ClientCapabilitiesDtoFromJSON(json: any): ClientCapabilitiesDto {
    return ClientCapabilitiesDtoFromJSONTyped(json, false);
}

export function ClientCapabilitiesDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClientCapabilitiesDto {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'playableMediaTypes': !exists(json, 'PlayableMediaTypes') ? undefined : json['PlayableMediaTypes'],
        'supportedCommands': !exists(json, 'SupportedCommands') ? undefined : ((json['SupportedCommands'] as Array<any>).map(GeneralCommandTypeFromJSON)),
        'supportsMediaControl': !exists(json, 'SupportsMediaControl') ? undefined : json['SupportsMediaControl'],
        'supportsContentUploading': !exists(json, 'SupportsContentUploading') ? undefined : json['SupportsContentUploading'],
        'messageCallbackUrl': !exists(json, 'MessageCallbackUrl') ? undefined : json['MessageCallbackUrl'],
        'supportsPersistentIdentifier': !exists(json, 'SupportsPersistentIdentifier') ? undefined : json['SupportsPersistentIdentifier'],
        'supportsSync': !exists(json, 'SupportsSync') ? undefined : json['SupportsSync'],
        'deviceProfile': !exists(json, 'DeviceProfile') ? undefined : ClientCapabilitiesDtoDeviceProfileFromJSON(json['DeviceProfile']),
        'appStoreUrl': !exists(json, 'AppStoreUrl') ? undefined : json['AppStoreUrl'],
        'iconUrl': !exists(json, 'IconUrl') ? undefined : json['IconUrl'],
    };
}

export function ClientCapabilitiesDtoToJSON(value?: ClientCapabilitiesDto | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'PlayableMediaTypes': value.playableMediaTypes,
        'SupportedCommands': value.supportedCommands === undefined ? undefined : ((value.supportedCommands as Array<any>).map(GeneralCommandTypeToJSON)),
        'SupportsMediaControl': value.supportsMediaControl,
        'SupportsContentUploading': value.supportsContentUploading,
        'MessageCallbackUrl': value.messageCallbackUrl,
        'SupportsPersistentIdentifier': value.supportsPersistentIdentifier,
        'SupportsSync': value.supportsSync,
        'DeviceProfile': ClientCapabilitiesDtoDeviceProfileToJSON(value.deviceProfile),
        'AppStoreUrl': value.appStoreUrl,
        'IconUrl': value.iconUrl,
    };
}

