From 771ea5ef2cd61af382b2d4f2ad320ad82dfc5e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Fr=C3=B6ssman?= Date: Wed, 17 Feb 2021 21:20:12 +0100 Subject: [PATCH] fs.FS wip --- migrate/iofs.go | 42 ++++++++++++++++++++++++++++++++++++++++++ migrate/iofs_test.go | 3 +++ 2 files changed, 45 insertions(+) create mode 100644 migrate/iofs.go create mode 100644 migrate/iofs_test.go 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