twitch-bot/internal/apimodules/overlays/fsstack.go

39 lines
756 B
Go
Raw Normal View History

package overlays
import (
"io/fs"
"net/http"
"path"
)
// Compile-time assertion
var _ http.FileSystem = httpFSStack{}
type httpFSStack []http.FileSystem
func (h httpFSStack) Open(name string) (http.File, error) {
for _, stackedFS := range h {
if f, err := stackedFS.Open(name); err == nil {
return f, nil
}
}
return nil, fs.ErrNotExist
}
// Compile-time assertion
var _ http.FileSystem = prefixedFS{}
type prefixedFS struct {
originFS http.FileSystem
prefix string
}
func newPrefixedFS(prefix string, originFS http.FileSystem) *prefixedFS {
return &prefixedFS{originFS: originFS, prefix: prefix}
}
func (p prefixedFS) Open(name string) (http.File, error) {
return p.originFS.Open(path.Join(p.prefix, name)) //nolint:wrapcheck
}