"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HaskellTargetLanguage = exports.haskellLanguageConfig = exports.haskellOptions = void 0;
const index_js_1 = require("../../RendererOptions/index.js");
const TargetLanguage_js_1 = require("../../TargetLanguage.js");
const HaskellRenderer_js_1 = require("./HaskellRenderer.js");
exports.haskellOptions = {
    justTypes: new index_js_1.BooleanOption("just-types", "Plain types only", false),
    useList: new index_js_1.EnumOption("array-type", "Use Array or List", {
        array: false,
        list: true,
    }, "array"),
    moduleName: new index_js_1.StringOption("module", "Generated module name", "NAME", "QuickType"),
};
exports.haskellLanguageConfig = {
    displayName: "Haskell",
    names: ["haskell"],
    extension: "haskell",
};
class HaskellTargetLanguage extends TargetLanguage_js_1.TargetLanguage {
    constructor() {
        super(exports.haskellLanguageConfig);
    }
    getOptions() {
        return exports.haskellOptions;
    }
    get supportsOptionalClassProperties() {
        return true;
    }
    get supportsUnionsWithBothNumberTypes() {
        return true;
    }
    makeRenderer(renderContext, untypedOptionValues) {
        return new HaskellRenderer_js_1.HaskellRenderer(this, renderContext, (0, index_js_1.getOptionValues)(exports.haskellOptions, untypedOptionValues));
    }
}
exports.HaskellTargetLanguage = HaskellTargetLanguage;
