/* tslint:disable */
/* eslint-disable */
/**
 * Commander Spellbook API
 * API for Commander Spellbook, the combo database engine for Magic: The Gathering
 *
 * The version of the OpenAPI document: 5.4.10
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { mapValues } from '../runtime.js';
import type { Variant } from './Variant.js';
import {
    VariantFromJSON,
    VariantFromJSONTyped,
    VariantToJSON,
    VariantToJSONTyped,
} from './Variant.js';

/**
 * 
 * @export
 * @interface ClassifiedVariant
 */
export interface ClassifiedVariant {
    /**
     * 
     * @type {Variant}
     * @memberof ClassifiedVariant
     */
    combo: Variant;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    relevant: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    borderlineRelevant: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    arguablyTwoCard: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    definitelyTwoCard: boolean;
    /**
     * 
     * @type {number}
     * @memberof ClassifiedVariant
     */
    speed: number;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    massLandDenial: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    extraTurn: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    lock: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    skipTurns: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    controlAllOpponents: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof ClassifiedVariant
     */
    controlSomeOpponents: boolean;
}

/**
 * Check if a given object implements the ClassifiedVariant interface.
 */
export function instanceOfClassifiedVariant(value: object): value is ClassifiedVariant {
    if (!('combo' in value) || value['combo'] === undefined) return false;
    if (!('relevant' in value) || value['relevant'] === undefined) return false;
    if (!('borderlineRelevant' in value) || value['borderlineRelevant'] === undefined) return false;
    if (!('arguablyTwoCard' in value) || value['arguablyTwoCard'] === undefined) return false;
    if (!('definitelyTwoCard' in value) || value['definitelyTwoCard'] === undefined) return false;
    if (!('speed' in value) || value['speed'] === undefined) return false;
    if (!('massLandDenial' in value) || value['massLandDenial'] === undefined) return false;
    if (!('extraTurn' in value) || value['extraTurn'] === undefined) return false;
    if (!('lock' in value) || value['lock'] === undefined) return false;
    if (!('skipTurns' in value) || value['skipTurns'] === undefined) return false;
    if (!('controlAllOpponents' in value) || value['controlAllOpponents'] === undefined) return false;
    if (!('controlSomeOpponents' in value) || value['controlSomeOpponents'] === undefined) return false;
    return true;
}

export function ClassifiedVariantFromJSON(json: any): ClassifiedVariant {
    return ClassifiedVariantFromJSONTyped(json, false);
}

export function ClassifiedVariantFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClassifiedVariant {
    if (json == null) {
        return json;
    }
    return {
        
        'combo': VariantFromJSON(json['combo']),
        'relevant': json['relevant'],
        'borderlineRelevant': json['borderlineRelevant'],
        'arguablyTwoCard': json['arguablyTwoCard'],
        'definitelyTwoCard': json['definitelyTwoCard'],
        'speed': json['speed'],
        'massLandDenial': json['massLandDenial'],
        'extraTurn': json['extraTurn'],
        'lock': json['lock'],
        'skipTurns': json['skipTurns'],
        'controlAllOpponents': json['controlAllOpponents'],
        'controlSomeOpponents': json['controlSomeOpponents'],
    };
}

export function ClassifiedVariantToJSON(json: any): ClassifiedVariant {
    return ClassifiedVariantToJSONTyped(json, false);
}

export function ClassifiedVariantToJSONTyped(value?: ClassifiedVariant | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'combo': VariantToJSON(value['combo']),
        'relevant': value['relevant'],
        'borderlineRelevant': value['borderlineRelevant'],
        'arguablyTwoCard': value['arguablyTwoCard'],
        'definitelyTwoCard': value['definitelyTwoCard'],
        'speed': value['speed'],
        'massLandDenial': value['massLandDenial'],
        'extraTurn': value['extraTurn'],
        'lock': value['lock'],
        'skipTurns': value['skipTurns'],
        'controlAllOpponents': value['controlAllOpponents'],
        'controlSomeOpponents': value['controlSomeOpponents'],
    };
}

