// Copyright 2017 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.devtools.build.lib.actions;

/** An enum indicating the type of a path on the file system. */
public enum FileStateType {
  REGULAR_FILE("file"),
  /**
   * A special file such as a socket, fifo, or device. See
   * {@link com.google.devtools.build.lib.vfs.FileStatus#isSpecialFile}.
   */
  SPECIAL_FILE("special file"),
  DIRECTORY("directory"),
  SYMLINK("symlink"),
  NONEXISTENT("non-existent path");

  private final String name;

  private FileStateType(String name) {
    this.name = name;
  }

  public String getHumanReadableName() {
    return name;
  }

  /** Returns true if this type does not correspond to a non-existent path. */
  public boolean exists() {
    return this != NONEXISTENT;
  }

  /** Returns true if this value corresponds to a symlink. */
  public boolean isSymlink() {
    return this == SYMLINK;
  }

  /**
   * Returns true if this value corresponds to a regular file. If so, its parent directory is
   * guaranteed to exist.
   */
  public boolean isFile() {
    return this == REGULAR_FILE;
  }

  /**
   * Returns true if this value corresponds to a special file. If so, its parent directory is
   * guaranteed to exist.
   */
  public boolean isSpecialFile() {
    return this == SPECIAL_FILE;
  }

  /**
   * Returns true if this value corresponds to a regular or special file. If so, its parent
   * directory is guaranteed to exist.
   */
  public boolean isRegularOrSpecialFile() {
    return this == REGULAR_FILE || this == FileStateType.SPECIAL_FILE;
  }

  /**
   * Returns true if the file is a directory. If so, its parent directory is guaranteed to exist.
   */
  public boolean isDirectory() {
    return this == DIRECTORY;
  }
}