/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cmFileLockResult_h
#define cmFileLockResult_h

#include "cmConfigure.h" // IWYU pragma: keep

#include <string>

#if defined(_WIN32)
#  include <windows.h> // DWORD
#endif

/**
 * @brief Result of the locking/unlocking file.
 * @note See @c cmFileLock
 */
class cmFileLockResult
{
public:
#if defined(_WIN32)
  typedef DWORD Error;
#else
  typedef int Error;
#endif

  /**
   * @brief Successful lock/unlock.
   */
  static cmFileLockResult MakeOk();

  /**
   * @brief Lock/Unlock failed. Read error/GetLastError.
   */
  static cmFileLockResult MakeSystem();

  /**
   * @brief Lock/Unlock failed. Timeout reached.
   */
  static cmFileLockResult MakeTimeout();

  /**
   * @brief File already locked.
   */
  static cmFileLockResult MakeAlreadyLocked();

  /**
   * @brief Internal error.
   */
  static cmFileLockResult MakeInternal();

  /**
   * @brief Try to lock with function guard outside of the function
   */
  static cmFileLockResult MakeNoFunction();

  bool IsOk() const;
  std::string GetOutputMessage() const;

private:
  enum ErrorType
  {
    OK,
    SYSTEM,
    TIMEOUT,
    ALREADY_LOCKED,
    INTERNAL,
    NO_FUNCTION
  };

  cmFileLockResult(ErrorType type, Error errorValue);

  ErrorType Type;
  Error ErrorValue;
};

#endif // cmFileLockResult_h
