about summary refs log tree commit diff
path: root/third_party/nix/src/libstore/fs-accessor.hh
blob: ad0d7f0ed9fd865fe9a2f6247cdf5f35b09d5b4b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#pragma once

#include "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