buildr/modules/plugin/fs.go
Peter 786578bc6f
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
feat: adapt new wire format
update to Go 1.21
2023-08-15 21:47:19 +02:00

66 lines
1.2 KiB
Go

package plugin
import (
"io/fs"
"os"
"strings"
)
var (
_ fs.FS = (*multiDirFS)(nil)
_ fs.ReadDirFS = (*multiDirFS)(nil)
_ fs.ReadFileFS = (*multiDirFS)(nil)
_ fs.StatFS = (*multiDirFS)(nil)
)
func newMultiDirFS(paths ...string) multiDirFS {
mdfs := make(multiDirFS, len(paths))
for i := range paths {
mdfs[paths[i]] = os.DirFS(paths[i])
}
return mdfs
}
type multiDirFS map[string]fs.FS
func (m multiDirFS) Open(name string) (fs.File, error) {
for base, pathFS := range m {
if strings.HasPrefix(name, base) {
return pathFS.Open(name)
}
}
return nil, fs.ErrNotExist
}
func (m multiDirFS) Stat(name string) (fs.FileInfo, error) {
for base, pathFS := range m {
if strings.HasPrefix(name, base) {
return fs.Stat(pathFS, name)
}
}
return nil, fs.ErrNotExist
}
func (m multiDirFS) ReadDir(name string) ([]fs.DirEntry, error) {
for base, pathFS := range m {
if strings.HasPrefix(name, base) {
return fs.ReadDir(pathFS, name)
}
}
return nil, fs.ErrNotExist
}
func (m multiDirFS) ReadFile(name string) ([]byte, error) {
for base, pathFS := range m {
if strings.HasPrefix(name, base) {
return fs.ReadFile(pathFS, name)
}
}
return nil, fs.ErrNotExist
}