//===- ASTImportError.h - Define errors while importing AST -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
//  This file defines the ASTImportError class which basically defines the kind
//  of error while importing AST .
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_AST_ASTIMPORTERROR_H
#define LLVM_CLANG_AST_ASTIMPORTERROR_H

#include "llvm/Support/Error.h"

namespace clang {

class ASTImportError : public llvm::ErrorInfo<ASTImportError> {

public:
  /// \brief Kind of error when importing an AST component.
  enum ErrorKind {
    NameConflict,         /// Naming ambiguity (likely ODR violation).
    UnsupportedConstruct, /// Not supported node or case.
    Unknown               /// Other error.
  };

  ErrorKind Error;

  static char ID;

  ASTImportError() : Error(Unknown) {}
  ASTImportError(const ASTImportError &Other) : Error(Other.Error) {}
  ASTImportError &operator=(const ASTImportError &Other) {
    Error = Other.Error;
    return *this;
  }
  ASTImportError(ErrorKind Error) : Error(Error) {}

  std::string toString() const;

  void log(llvm::raw_ostream &OS) const override;
  std::error_code convertToErrorCode() const override;
};

} // namespace clang

#endif // LLVM_CLANG_AST_ASTIMPORTERROR_H
