102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| package filesystem
 | |
| 
 | |
| import (
 | |
| 	"io/fs"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| )
 | |
| 
 | |
| type FileSystem struct {
 | |
| 	ReadFile          func(string) ([]byte, error)
 | |
| 	ReadDir           func(string) ([]fs.DirEntry, error)
 | |
| 	DeleteFile        func(string) error
 | |
| 	FileExists        func(string) (bool, error)
 | |
| 	Glob              func(string) ([]string, error)
 | |
| 	FileExistsAt      func(string) bool
 | |
| 	DirectoryExistsAt func(string) bool
 | |
| 	Stat              func(string) (os.FileInfo, error)
 | |
| 	Getwd             func() (string, error)
 | |
| 	Chdir             func(string) error
 | |
| 	Abs               func(string) (string, error)
 | |
| }
 | |
| 
 | |
| func DefaultFileSystem() *FileSystem {
 | |
| 	dfs := FileSystem{
 | |
| 		ReadFile:   os.ReadFile,
 | |
| 		ReadDir:    os.ReadDir,
 | |
| 		DeleteFile: os.Remove,
 | |
| 		Stat:       os.Stat,
 | |
| 		Glob:       filepath.Glob,
 | |
| 		Getwd:      os.Getwd,
 | |
| 		Chdir:      os.Chdir,
 | |
| 		Abs:        filepath.Abs,
 | |
| 	}
 | |
| 
 | |
| 	dfs.FileExistsAt = dfs.fileExistsAtDefault
 | |
| 	dfs.DirectoryExistsAt = dfs.directoryExistsDefault
 | |
| 	dfs.FileExists = dfs.fileExistsDefault
 | |
| 	return &dfs
 | |
| }
 | |
| 
 | |
| func FromFileSystem(params FileSystem) *FileSystem {
 | |
| 	dfs := DefaultFileSystem()
 | |
| 
 | |
| 	if params.ReadFile != nil {
 | |
| 		dfs.ReadFile = params.ReadFile
 | |
| 	}
 | |
| 	if params.ReadDir != nil {
 | |
| 		dfs.ReadDir = params.ReadDir
 | |
| 	}
 | |
| 	if params.DeleteFile != nil {
 | |
| 		dfs.DeleteFile = params.DeleteFile
 | |
| 	}
 | |
| 	if params.FileExists != nil {
 | |
| 		dfs.FileExists = params.FileExists
 | |
| 	}
 | |
| 	if params.Glob != nil {
 | |
| 		dfs.Glob = params.Glob
 | |
| 	}
 | |
| 	if params.FileExistsAt != nil {
 | |
| 		dfs.FileExistsAt = params.FileExistsAt
 | |
| 	}
 | |
| 	if params.DirectoryExistsAt != nil {
 | |
| 		dfs.DirectoryExistsAt = params.DirectoryExistsAt
 | |
| 	}
 | |
| 	if params.Stat != nil {
 | |
| 		dfs.Stat = params.Stat
 | |
| 	}
 | |
| 	if params.Getwd != nil {
 | |
| 		dfs.Getwd = params.Getwd
 | |
| 	}
 | |
| 	if params.Chdir != nil {
 | |
| 		dfs.Chdir = params.Chdir
 | |
| 	}
 | |
| 	if params.Abs != nil {
 | |
| 		dfs.Abs = params.Abs
 | |
| 	}
 | |
| 
 | |
| 	return dfs
 | |
| }
 | |
| 
 | |
| func (filesystem *FileSystem) fileExistsAtDefault(path string) bool {
 | |
| 	fileInfo, err := filesystem.Stat(path)
 | |
| 	return err == nil && fileInfo.Mode().IsRegular()
 | |
| }
 | |
| 
 | |
| func (filesystem *FileSystem) fileExistsDefault(path string) (bool, error) {
 | |
| 	_, err := filesystem.Stat(path)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		if os.IsNotExist(err) {
 | |
| 			return false, nil
 | |
| 		}
 | |
| 		return false, err
 | |
| 	}
 | |
| 	return true, nil
 | |
| }
 | |
| 
 | |
| func (filesystem *FileSystem) directoryExistsDefault(path string) bool {
 | |
| 	fileInfo, err := filesystem.Stat(path)
 | |
| 	return err == nil && fileInfo.Mode().IsDir()
 | |
| }
 |