package model import ( "context" "git.kmsign.ru/royalcat/tstor/src/host/vfs" ) type FsElem interface { Name() string IsDir() bool } func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (FsEntry, error) { switch e.(type) { case *vfs.ArchiveFS: e := e.(*vfs.ArchiveFS) return ArchiveFs{ Name: e.Name(), Size: e.Size(), FS: e, }, nil case *vfs.ResolverFS: e := e.(*vfs.ResolverFS) return ResolverFs{ Name: e.Name(), FS: e, }, nil case *vfs.TorrentFS: e := e.(*vfs.TorrentFS) torrent, err := MapTorrent(ctx, e.Torrent) if err != nil { return nil, err } return TorrentFs{ Name: e.Name(), Torrent: torrent, FS: e, }, nil default: if e.IsDir() { return SimpleDir{ Name: e.Name(), FS: fs, Path: path, }, nil } else { return SimpleFile{ Name: e.Name(), }, nil } } }