mirror of
https://github.com/nezhahq/nezha.git
synced 2025-02-02 09:38:13 -05:00
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)
|
||
|
}
|