/* tslint:disable */
/* eslint-disable */
/**
 * Grand Archive TCG API
 * See https://index.gatcg.com/api
 *
 * The version of the OpenAPI document: 0.0
 * 
 *
 * 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';
import type { CardEdition } from './CardEdition';
import {
    CardEditionFromJSON,
    CardEditionFromJSONTyped,
    CardEditionToJSON,
    CardEditionToJSONTyped,
} from './CardEdition';

/**
 * 
 * @export
 * @interface FullCard
 */
export interface FullCard {
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    uuid: string;
    /**
     * 
     * @type {Array<string>}
     * @memberof FullCard
     */
    types: Array<string>;
    /**
     * 
     * @type {Array<string>}
     * @memberof FullCard
     */
    subtypes?: Array<string>;
    /**
     * 
     * @type {Array<string>}
     * @memberof FullCard
     */
    classes?: Array<string>;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    element?: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    name: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    slug: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    effect?: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    effectRaw?: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    rule?: string;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    flavor?: string;
    /**
     * 
     * @type {number}
     * @memberof FullCard
     */
    costMemory?: number;
    /**
     * 
     * @type {number}
     * @memberof FullCard
     */
    level?: number;
    /**
     * 
     * @type {number}
     * @memberof FullCard
     */
    power?: number;
    /**
     * 
     * @type {number}
     * @memberof FullCard
     */
    life?: number;
    /**
     * 
     * @type {number}
     * @memberof FullCard
     */
    durability?: number;
    /**
     * 
     * @type {boolean}
     * @memberof FullCard
     */
    speed?: boolean;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    legality?: string;
    /**
     * 
     * @type {Array<string>}
     * @memberof FullCard
     */
    relatedIds?: Array<string>;
    /**
     * 
     * @type {string}
     * @memberof FullCard
     */
    lastUpdate?: string;
    /**
     * 
     * @type {Array<CardEdition>}
     * @memberof FullCard
     */
    editions?: Array<CardEdition>;
    /**
     * 
     * @type {Array<object>}
     * @memberof FullCard
     */
    resultEditions?: Array<object>;
}

/**
 * Check if a given object implements the FullCard interface.
 */
export function instanceOfFullCard(value: object): value is FullCard {
    if (!('uuid' in value) || value['uuid'] === undefined) return false;
    if (!('types' in value) || value['types'] === undefined) return false;
    if (!('name' in value) || value['name'] === undefined) return false;
    if (!('slug' in value) || value['slug'] === undefined) return false;
    return true;
}

export function FullCardFromJSON(json: any): FullCard {
    return FullCardFromJSONTyped(json, false);
}

export function FullCardFromJSONTyped(json: any, ignoreDiscriminator: boolean): FullCard {
    if (json == null) {
        return json;
    }
    return {
        
        'uuid': json['uuid'],
        'types': json['types'],
        'subtypes': json['subtypes'] == null ? undefined : json['subtypes'],
        'classes': json['classes'] == null ? undefined : json['classes'],
        'element': json['element'] == null ? undefined : json['element'],
        'name': json['name'],
        'slug': json['slug'],
        'effect': json['effect'] == null ? undefined : json['effect'],
        'effectRaw': json['effect_raw'] == null ? undefined : json['effect_raw'],
        'rule': json['rule'] == null ? undefined : json['rule'],
        'flavor': json['flavor'] == null ? undefined : json['flavor'],
        'costMemory': json['cost_memory'] == null ? undefined : json['cost_memory'],
        'level': json['level'] == null ? undefined : json['level'],
        'power': json['power'] == null ? undefined : json['power'],
        'life': json['life'] == null ? undefined : json['life'],
        'durability': json['durability'] == null ? undefined : json['durability'],
        'speed': json['speed'] == null ? undefined : json['speed'],
        'legality': json['legality'] == null ? undefined : json['legality'],
        'relatedIds': json['related_ids'] == null ? undefined : json['related_ids'],
        'lastUpdate': json['last_update'] == null ? undefined : json['last_update'],
        'editions': json['editions'] == null ? undefined : ((json['editions'] as Array<any>).map(CardEditionFromJSON)),
        'resultEditions': json['result_editions'] == null ? undefined : json['result_editions'],
    };
}

  export function FullCardToJSON(json: any): FullCard {
      return FullCardToJSONTyped(json, false);
  }

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

    return {
        
        'uuid': value['uuid'],
        'types': value['types'],
        'subtypes': value['subtypes'],
        'classes': value['classes'],
        'element': value['element'],
        'name': value['name'],
        'slug': value['slug'],
        'effect': value['effect'],
        'effect_raw': value['effectRaw'],
        'rule': value['rule'],
        'flavor': value['flavor'],
        'cost_memory': value['costMemory'],
        'level': value['level'],
        'power': value['power'],
        'life': value['life'],
        'durability': value['durability'],
        'speed': value['speed'],
        'legality': value['legality'],
        'related_ids': value['relatedIds'],
        'last_update': value['lastUpdate'],
        'editions': value['editions'] == null ? undefined : ((value['editions'] as Array<any>).map(CardEditionToJSON)),
        'result_editions': value['resultEditions'],
    };
}

