55f5c89c1c
* feat: description file for custom theme; use gjson * fix gosec * remove outdated stuff
34 lines
586 B
Go
34 lines
586 B
Go
package utils
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"os"
|
|
)
|
|
|
|
// HybridFS combines embed.FS and os.DirFS.
|
|
type HybridFS struct {
|
|
embedFS, dir fs.FS
|
|
}
|
|
|
|
func NewHybridFS(embed embed.FS, subDir string, localDir string) (*HybridFS, error) {
|
|
subFS, err := fs.Sub(embed, subDir)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &HybridFS{
|
|
embedFS: subFS,
|
|
dir: os.DirFS(localDir),
|
|
}, nil
|
|
}
|
|
|
|
func (hfs *HybridFS) Open(name string) (fs.File, error) {
|
|
// Ensure embed files are not replaced
|
|
if file, err := hfs.embedFS.Open(name); err == nil {
|
|
return file, nil
|
|
}
|
|
|
|
return hfs.dir.Open(name)
|
|
}
|