/* 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 { ClientCapabilitiesDeviceProfile } from './ClientCapabilitiesDeviceProfile';
import {
    ClientCapabilitiesDeviceProfileFromJSON,
    ClientCapabilitiesDeviceProfileFromJSONTyped,
    ClientCapabilitiesDeviceProfileToJSON,
} from './ClientCapabilitiesDeviceProfile';
import type { GeneralCommandType } from './GeneralCommandType';
import {
    GeneralCommandTypeFromJSON,
    GeneralCommandTypeFromJSONTyped,
    GeneralCommandTypeToJSON,
} from './GeneralCommandType';

/**
 * 
 * @export
 * @interface ClientCapabilities
 */
export interface ClientCapabilities {
    /**
     * 
     * @type {Array<string>}
     * @memberof ClientCapabilities
     */
    playableMediaTypes?: Array<string> | null;
    /**
     * 
     * @type {Array<GeneralCommandType>}
     * @memberof ClientCapabilities
     */
    supportedCommands?: Array<GeneralCommandType> | null;
    /**
     * 
     * @type {boolean}
     * @memberof ClientCapabilities
     */
    supportsMediaControl?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClientCapabilities
     */
    supportsContentUploading?: boolean;
    /**
     * 
     * @type {string}
     * @memberof ClientCapabilities
     */
    messageCallbackUrl?: string | null;
    /**
     * 
     * @type {boolean}
     * @memberof ClientCapabilities
     */
    supportsPersistentIdentifier?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClientCapabilities
     */
    supportsSync?: boolean;
    /**
     * 
     * @type {ClientCapabilitiesDeviceProfile}
     * @memberof ClientCapabilities
     */
    deviceProfile?: ClientCapabilitiesDeviceProfile | null;
    /**
     * 
     * @type {string}
     * @memberof ClientCapabilities
     */
    appStoreUrl?: string | null;
    /**
     * 
     * @type {string}
     * @memberof ClientCapabilities
     */
    iconUrl?: string | null;
}

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

    return isInstance;
}

export function ClientCapabilitiesFromJSON(json: any): ClientCapabilities {
    return ClientCapabilitiesFromJSONTyped(json, false);
}

export function ClientCapabilitiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClientCapabilities {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'playableMediaTypes': !exists(json, 'PlayableMediaTypes') ? undefined : json['PlayableMediaTypes'],
        'supportedCommands': !exists(json, 'SupportedCommands') ? undefined : (json['SupportedCommands'] === null ? null : (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 : ClientCapabilitiesDeviceProfileFromJSON(json['DeviceProfile']),
        'appStoreUrl': !exists(json, 'AppStoreUrl') ? undefined : json['AppStoreUrl'],
        'iconUrl': !exists(json, 'IconUrl') ? undefined : json['IconUrl'],
    };
}

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

