﻿//----------------------
// <auto-generated>
// </auto-generated>
//----------------------







export abstract class MyBaseClass {
    myProperty!: MyPropertyClass;

    protected _discriminator: string;

    constructor() {
        {
            this.myProperty = new MyPropertyClass();
        }
        this._discriminator = "MyBaseClass";
    }

    init(_data?: any) {
        if (_data) {
            this.myProperty = _data["MyProperty"] ? MyPropertyClass.fromJS(_data["MyProperty"]) : new MyPropertyClass();
        }
    }

    static fromJS(data: any): MyBaseClass {
        data = typeof data === 'object' ? data : {};
        if (data["discriminator"] === "MyDerivedClass") {
            let result = new MyDerivedClass();
            result.init(data);
            return result;
        }
        throw new Error("The abstract class 'MyBaseClass' cannot be instantiated.");
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["discriminator"] = this._discriminator;
        data["MyProperty"] = this.myProperty ? this.myProperty.toJSON() : undefined as any;
        return data;
    }
}

export class MyPropertyClass {
    myStringProperty?: string | undefined;


    init(_data?: any) {
        if (_data) {
            this.myStringProperty = _data["MyStringProperty"];
        }
    }

    static fromJS(data: any): MyPropertyClass {
        data = typeof data === 'object' ? data : {};
        let result = new MyPropertyClass();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["MyStringProperty"] = this.myStringProperty;
        return data;
    }
}

export class MyDerivedClass extends MyBaseClass {

    constructor() {
        super();
        this._discriminator = "MyDerivedClass";
    }

    override init(_data?: any) {
        super.init(_data);
    }

    static override fromJS(data: any): MyDerivedClass {
        data = typeof data === 'object' ? data : {};
        let result = new MyDerivedClass();
        result.init(data);
        return result;
    }

    override toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}