{{>licenseInfo}}
{{#models}}
{{#model}}
{{#tsImports}}
import { {{classname}} } from "./{{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}";
{{#-last}}

{{/-last}}
{{/tsImports}}
{{#description}}
/**
* {{{.}}}
*/

{{/description}}
{{^isEnum}}
{{#oneOf}}
{{#-first}}{{>model/modelOneOf}}{{/-first}}{{/oneOf}}
{{^oneOf}}
export class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{
{{#vars}}
{{#description}}
    /**
    * {{{.}}}
    {{#deprecated}}
    *
	* @deprecated {{#vendorExtensions.x-deprecatedInVersion}}since {{#appName}}{{{.}}}{{/appName}} v{{.}}{{/vendorExtensions.x-deprecatedInVersion}}{{#vendorExtensions.x-deprecatedMessage}}
	* {{{.}}}{{/vendorExtensions.x-deprecatedMessage}}
    {{/deprecated}}
    */
{{/description}}
{{^description}}
    {{#deprecated}}
    /**
	* @deprecated {{#vendorExtensions.x-deprecatedInVersion}}since {{#appName}}{{{.}}}{{/appName}} v{{.}}{{/vendorExtensions.x-deprecatedInVersion}}{{#vendorExtensions.x-deprecatedMessage}}
	* {{{.}}}{{/vendorExtensions.x-deprecatedMessage}}
    */
    {{/deprecated}}
{{/description}}
{{#isModel}}
    "{{name}}"{{^required}}?{{/required}}: {{#isEnum}}{{#containerTypeMapped}}{{{.}}}<{{/containerTypeMapped}}{{{classname}}}.{{{enumName}}}{{#containerTypeMapped}}>{{/containerTypeMapped}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}} | null{{/required}};
{{/isModel}}
{{^isModel}}
    "{{name}}"{{^required}}?{{/required}}: {{#isEnum}}{{#containerTypeMapped}}{{{.}}}<{{/containerTypeMapped}}{{{classname}}}.{{{enumName}}}{{#containerTypeMapped}}>{{/containerTypeMapped}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}} | null{{/isNullable}};
{{/isModel}}
{{/vars}}

    {{#discriminator}}
    static {{#parent}}override {{/parent}}readonly discriminator: string | undefined = "{{discriminatorName}}";
    {{/discriminator}}
    {{^discriminator}}
    static {{#parent}}override {{/parent}}readonly discriminator: string | undefined = undefined;
    {{/discriminator}}
    {{#hasDiscriminatorWithNonEmptyMapping}}

    static {{#parent}}override {{/parent}}readonly mapping: {[index: string]: string} | undefined = {
    {{#discriminator.mappedModels}}
        "{{mappingName}}": "{{modelName}}",
    {{/discriminator.mappedModels}}
    };
    {{/hasDiscriminatorWithNonEmptyMapping}}
    {{^hasDiscriminatorWithNonEmptyMapping}}

    static {{#parent}}override {{/parent}}readonly mapping: {[index: string]: string} | undefined = undefined;
    {{/hasDiscriminatorWithNonEmptyMapping}}

    {{^isArray}}
    static {{#parent}}override {{/parent}}readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
        {{#vars}}
        {
            "name": "{{name}}",
            "baseName": "{{baseName}}",
            {{#isModel}}
            "type": "{{#isEnum}}{{{classname}}}.{{{enumName}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}} | null{{/required}}",
            {{/isModel}}
            {{^isModel}}
            "type": "{{#isEnum}}{{{classname}}}.{{{enumName}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}} | null{{/isNullable}}",
            {{/isModel}}
            "format": "{{dataFormat}}"
        }{{^-last}},
        {{/-last}}
        {{/vars}}
    ];

    static {{#parent}}override {{/parent}}getAttributeTypeMap() {
        {{#parent}}
        return super.getAttributeTypeMap().concat({{classname}}.attributeTypeMap);
        {{/parent}}
        {{^parent}}
        return {{classname}}.attributeTypeMap;
        {{/parent}}
    }
    {{/isArray}}

    public constructor() {
        {{#parent}}
        super();
        {{/parent}}
        {{#allVars}}
        {{#discriminatorValue}}
        {{/discriminatorValue}}
        {{/allVars}}
        {{#discriminatorName}}
        //this.{{discriminatorName}} = "{{classname}}";
        {{/discriminatorName}}
    }
}

{{#hasEnums}}
export namespace {{classname}} {
{{#vars}}
{{#isEnum}}
    export enum {{enumName}} {
        {{#allowableValues}}
        {{#enumVars}}
        {{name}} = {{{value}}}{{^-last}},{{/-last}}
        {{/enumVars}}
        {{/allowableValues}}
    }
{{/isEnum}}
{{/vars}}
}
{{/hasEnums}}
{{/oneOf}}
{{/isEnum}}
{{#isEnum}}
export enum {{classname}} {
    {{#allowableValues}}
    {{#enumVars}}
    {{name}} = {{{value}}}{{^-last}},{{/-last}}
    {{/enumVars}}
    {{/allowableValues}}
}
{{/isEnum}}
{{/model}}
{{/models}}