{{- /*
--------------------------------------------------------------------------------
Template file for use with tools/src/cmd/gen to generate diagnostic_control.cc

See:
* tools/src/cmd/gen for structures used by this template
* https://golang.org/pkg/text/template/ for documentation on the template syntax
--------------------------------------------------------------------------------
*/ -}}

{{- Import "src/tint/templates/enums.tmpl.inc" -}}

#include "src/tint/ast/diagnostic_control.h"

#include <string>

#include "src/tint/program_builder.h"

TINT_INSTANTIATE_TYPEINFO(tint::ast::DiagnosticControl);

namespace tint::ast {

DiagnosticControl::~DiagnosticControl() = default;

const DiagnosticControl* DiagnosticControl::Clone(CloneContext* ctx) const {
    auto src = ctx->Clone(source);
    auto rule = ctx->Clone(rule_name);
    return ctx->dst->create<DiagnosticControl>(src, severity, rule);
}

diag::Severity ToSeverity(DiagnosticSeverity sc) {
    switch (sc) {
        case DiagnosticSeverity::kError:
            return diag::Severity::Error;
        case DiagnosticSeverity::kWarning:
            return diag::Severity::Warning;
        case DiagnosticSeverity::kInfo:
            return diag::Severity::Note;
        default:
            return diag::Severity::InternalCompilerError;
    }
}

{{ Eval "ParseEnum" (Sem.Enum "diagnostic_severity")}}

{{ Eval "EnumOStream" (Sem.Enum "diagnostic_severity")}}

{{ Eval "ParseEnum" (Sem.Enum "diagnostic_rule")}}

{{ Eval "EnumOStream" (Sem.Enum "diagnostic_rule")}}

}  // namespace tint::ast
