Since go1.16 is released now I just added this to a project to integrate with embed.FS.
It would probably be handy to have built in and io.fs probably won't be going anywhere soon.
Something like this maybe with an exported constructor function. Maybe with build in support to specify a subdirectory NewIOFSMigratorFS(fs.FS) would make it clear which migratorfs it is but that name is kind of a mouthful.
type iofsMigratorFS struct{ fsys fs.FS }
func (m iofsMigratorFS) ReadDir(dirname string) ([]fs.FileInfo, error) {
de, err := fs.ReadDir(m.fsys, dirname)
if err != nil {
return nil, err
}
var res []os.FileInfo
for _, v := range de {
fi, err := v.Info()
if err != nil {
return nil, err
}
res = append(res, fi)
}
return res, nil
}
func (m iofsMigratorFS) ReadFile(filename string) ([]byte, error) {
return fs.ReadFile(m.fsys, filename)
}
func (m iofsMigratorFS) Glob(pattern string) (matches []string, err error) {
return fs.Glob(m.fsys, pattern)
}