package storageimport ("context""io/fs""github.com/navidrome/navidrome/model/metadata")type Storage interface {FS() (MusicFS, error)}// MusicFS is an interface that extends the fs.FS interface with the ability to read tags from filestype MusicFS interface {fs.FSReadTags(path ...string) (map[string]metadata.Info, error)}// SymlinkResolverFS is an optional interface for MusicFS implementations backed by a real// filesystem. ResolveSymlink resolves the whole symlink chain of the named entry at the OS// level and returns the final target's path — including targets outside the FS root, which// fs.ReadLink-based resolution cannot follow.type SymlinkResolverFS interface {ResolveSymlink(name string) (string, error)}// Watcher is a storage with the ability watch the FS and notify changestype Watcher interface {// Start starts a watcher on the whole FS and returns a channel to send detected changes.// The watcher must be stopped when the context is done.Start(context.Context) (<-chan string, error)}