/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SKSL_ASTENUM
#define SKSL_ASTENUM

#include "SkSLASTDeclaration.h"
namespace SkSL {

struct ASTEnum : public ASTDeclaration {
    ASTEnum(int offset, StringFragment typeName, std::vector<StringFragment> names,
            std::vector<std::unique_ptr<ASTExpression>> values)
    : INHERITED(offset, kEnum_Kind)
    , fTypeName(typeName)
    , fNames(std::move(names))
    , fValues(std::move(values)) {
        SkASSERT(fNames.size() == fValues.size());
    }

    String description() const override {
        String result = "enum class " + fTypeName + " {\n";
        String separator;
        for (StringFragment name : fNames) {
            result += separator + "    " + name;
            separator = ",\n";
        }
        result += "};";
        return result;
    }

    const StringFragment fTypeName;
    const std::vector<StringFragment> fNames;
    const std::vector<std::unique_ptr<ASTExpression>> fValues;

    typedef ASTDeclaration INHERITED;
};

} // namespace

#endif
