about summary refs log tree commit diff
path: root/third_party/nix/src/libstore/fs-accessor.hh
#pragma once

#include "libutil/types.hh"

namespace nix {

/* An abstract class for accessing a filesystem-like structure, such
   as a (possibly remote) Nix store or the contents of a NAR file. */
class FSAccessor {
 public:
  enum Type { tMissing, tRegular, tSymlink, tDirectory };

  struct Stat {
    Type type = tMissing;
    uint64_t fileSize = 0;      // regular files only
    bool isExecutable = false;  // regular files only
    uint64_t narOffset = 0;     // regular files only
  };

  virtual ~FSAccessor() {}

  virtual Stat stat(const Path& path) = 0;

  virtual StringSet readDirectory(const Path& path) = 0;

  virtual std::string readFile(const Path& path) = 0;

  virtual std::string readLink(const Path& path) = 0;
};

}  // namespace nix