72 lines
1.8 KiB
Go
Raw Normal View History

package scoped
import (
"io/fs"
"path/filepath"
2025-03-25 13:14:27 -04:00
"numenor-labs.us/dsfx/internal/lib/disk"
)
// StorageScope is an interface that extends the disk.Disk interface by ensuring
// that all file operations are limited to a specific folder on the disk, which
// provides a dedicated storage scope that is isolated from other file operations.
type StorageScope interface {
disk.Disk
// Scope returns the storage scope as a string.
Scope() string
}
// scoped is a concrete implementation of the StorageScope interface.
type scoped struct {
disk disk.Disk
scope string
}
// New creates a new StorageScope with the specified scope.
func New(disk disk.Disk, scope string) StorageScope {
return &scoped{disk, scope}
}
// Create implements disk.Disk.
func (s *scoped) Create(name string) (disk.File, error) {
return s.disk.Create(s.path(name))
}
// Mkdir implements disk.Disk.
func (s *scoped) Mkdir(name string, perm fs.FileMode) error {
return s.disk.Mkdir(s.path(name), perm)
}
// MkdirAll implements disk.Disk.
func (s *scoped) MkdirAll(name string, perm fs.FileMode) error {
return s.disk.MkdirAll(s.path(name), perm)
}
// Open implements disk.Disk.
func (s *scoped) Open(name string) (disk.File, error) {
return s.disk.Open(s.path(name))
}
// Remove implements disk.Disk.
func (s *scoped) Remove(name string) error {
return s.disk.Remove(s.path(name))
}
// Stat implements disk.Disk.
func (s *scoped) Stat(name string) (fs.FileInfo, error) {
return s.disk.Stat(s.path(name))
}
// Scope implements StorageScope.
func (s *scoped) Scope() string {
return s.scope
}
// path is a helper method that returns the full path for a given path relative
// to the storage scope. This ensures that all file operations are performed
// within the defined scope.
func (s *scoped) path(path string) string {
return filepath.Join(s.scope, path)
}