package database import ( "embed" "io/fs" "path" "strings" ) type ( // EmbedFSMigrator is a wrapper around embed.FS enabling ReadDir("/") // which normally would cause an error as path "/" is not available // within an embed.FS EmbedFSMigrator struct { BasePath string embed.FS } ) // NewEmbedFSMigrator creates a new EmbedFSMigrator func NewEmbedFSMigrator(fs embed.FS, basePath string) MigrationStorage { return EmbedFSMigrator{BasePath: basePath, FS: fs} } // ReadDir Wraps embed.FS.ReadDir with adjustment of the path prefix func (e EmbedFSMigrator) ReadDir(name string) ([]fs.DirEntry, error) { name = path.Join(e.BasePath, strings.TrimPrefix(name, "/")) return e.FS.ReadDir(name) } // ReadFile Wraps embed.FS.ReadFile with adjustment of the path prefix func (e EmbedFSMigrator) ReadFile(name string) ([]byte, error) { name = path.Join(e.BasePath, strings.TrimPrefix(name, "/")) return e.FS.ReadFile(name) }