"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.IdentitySerializer = void 0;
const interface_1 = require("./interface");
class IdentityMap extends interface_1.SerializeObject {
    constructor() {
        super(...arguments);
        Object.defineProperty(this, "value", {
            enumerable: true,
            configurable: true,
            writable: true,
            value: {}
        });
        Object.defineProperty(this, "currentKey", {
            enumerable: true,
            configurable: true,
            writable: true,
            value: void 0
        });
    }
    serializeKey(key) {
        this.currentKey = key;
    }
    serializeValue(value) {
        this.value[this.currentKey] = value;
    }
    end() {
        return this.value;
    }
}
class IdentityIterable extends interface_1.SerializeIterable {
    constructor() {
        super(...arguments);
        Object.defineProperty(this, "value", {
            enumerable: true,
            configurable: true,
            writable: true,
            value: []
        });
    }
    serializeElement(value) {
        this.value.push(value);
    }
    end() {
        return this.value;
    }
}
class IdentitySerializer {
    serializeAny(value) {
        return value;
    }
    serializeBoolean(value) {
        return value;
    }
    serializeNumber(value) {
        return value;
    }
    serializeBigInt(value) {
        return value;
    }
    serializeString(value) {
        return value;
    }
    serializeSymbol(value) {
        return value;
    }
    serializeNull() {
        return null;
    }
    serializeIterable(_len) {
        return new IdentityIterable();
    }
    serializeObject(_len) {
        return new IdentityMap();
    }
    serializeClass(_name, _len) {
        return new IdentityMap();
    }
}
exports.IdentitySerializer = IdentitySerializer;