diff --git a/migrate/iofs.go b/migrate/iofs.go new file mode 100644 index 0000000..70c37db --- /dev/null +++ b/migrate/iofs.go @@ -0,0 +1,42 @@ +// +build go1.16 + +package migrate + +import ( + "io/fs" + "os" +) + +// NewFS returns a MigratorFS that uses as fs.FS filesystem. +func NewFS(fsys fs.FS) MigratorFS { + return iofsMigratorFS{fsys: fsys} +} + +type iofsMigratorFS struct{ fsys fs.FS } + +// ReadDir implements the MigratorFS interface. +func (m iofsMigratorFS) ReadDir(dirname string) ([]fs.FileInfo, error) { + d, err := fs.ReadDir(m.fsys, dirname) + if err != nil { + return nil, err + } + var fis []os.FileInfo + for _, v := range d { + fi, err := v.Info() + if err != nil { + return nil, err + } + fis = append(fis, fi) + } + return fis, nil +} + +// ReadFile implements the MigratorFS interface. +func (m iofsMigratorFS) ReadFile(filename string) ([]byte, error) { + return fs.ReadFile(m.fsys, filename) +} + +// Glob implements the MigratorFS interface. +func (m iofsMigratorFS) Glob(pattern string) (matches []string, err error) { + return fs.Glob(m.fsys, pattern) +} diff --git a/migrate/iofs_test.go b/migrate/iofs_test.go new file mode 100644 index 0000000..7e4c8b9 --- /dev/null +++ b/migrate/iofs_test.go @@ -0,0 +1,3 @@ +// +build go1.16 + +package migrate