2025-10-15 10:12:44 +03:00

80 lines
2.3 KiB
Go

package vfs
import (
"io/fs"
"time"
)
//go:generate go tool github.com/matryer/moq -fmt goimports -out vfsmock/mock_generated.go -pkg vfsmock . FS
//go:generate go tool mvdan.cc/gofumpt -w vfsmock/mock_generated.go
// FS is a file system abstraction.
type FS interface {
// UseCaseSensitiveFileNames returns true if the file system is case-sensitive.
UseCaseSensitiveFileNames() bool
// FileExists returns true if the file exists.
FileExists(path string) bool
// ReadFile reads the file specified by path and returns the content.
// If the file fails to be read, ok will be false.
ReadFile(path string) (contents string, ok bool)
WriteFile(path string, data string, writeByteOrderMark bool) error
// Removes `path` and all its contents. Will return the first error it encounters.
Remove(path string) error
// Chtimes changes the access and modification times of the named
Chtimes(path string, aTime time.Time, mTime time.Time) error
// DirectoryExists returns true if the path is a directory.
DirectoryExists(path string) bool
// GetAccessibleEntries returns the files/directories in the specified directory.
// If any entry is a symlink, it will be followed.
GetAccessibleEntries(path string) Entries
Stat(path string) FileInfo
// WalkDir walks the file tree rooted at root, calling walkFn for each file or directory in the tree.
// It is has the same behavior as [fs.WalkDir], but with paths as [string].
WalkDir(root string, walkFn WalkDirFunc) error
// Realpath returns the "real path" of the specified path,
// following symlinks and correcting filename casing.
Realpath(path string) string
}
type Entries struct {
Files []string
Directories []string
}
type (
// DirEntry is [fs.DirEntry].
DirEntry = fs.DirEntry
// FileInfo is [fs.FileInfo].
FileInfo = fs.FileInfo
)
var (
ErrInvalid = fs.ErrInvalid // "invalid argument"
ErrPermission = fs.ErrPermission // "permission denied"
ErrExist = fs.ErrExist // "file already exists"
ErrNotExist = fs.ErrNotExist // "file does not exist"
ErrClosed = fs.ErrClosed // "file already closed"
)
// WalkDirFunc is [fs.WalkDirFunc].
type WalkDirFunc = fs.WalkDirFunc
var (
// SkipAll is [fs.SkipAll].
SkipAll = fs.SkipAll //nolint:errname
// SkipDir is [fs.SkipDir].
SkipDir = fs.SkipDir //nolint:errname
)