Initial QSfera import
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package fsx
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
|
||||
"github.com/spf13/afero"
|
||||
)
|
||||
|
||||
var (
|
||||
// assert interfaces implemented
|
||||
_ afero.Fs = (*BaseFS)(nil)
|
||||
_ FS = (*BaseFS)(nil)
|
||||
)
|
||||
|
||||
// FS is our default interface for filesystems.
|
||||
type FS interface {
|
||||
afero.Fs
|
||||
IOFS() fs.FS
|
||||
}
|
||||
|
||||
// BaseFS is our default implementation of the FS interface.
|
||||
type BaseFS struct {
|
||||
afero.Fs
|
||||
}
|
||||
|
||||
// IOFS returns the filesystem as an io/fs.FS.
|
||||
func (b *BaseFS) IOFS() fs.FS {
|
||||
return afero.NewIOFS(b)
|
||||
}
|
||||
|
||||
// FromAfero returns a new BaseFS instance from an afero.Fs.
|
||||
func FromAfero(fSys afero.Fs) *BaseFS {
|
||||
return &BaseFS{Fs: fSys}
|
||||
}
|
||||
|
||||
// FromIOFS returns a new BaseFS instance from an io/fs.FS.
|
||||
func FromIOFS(fSys fs.FS) *BaseFS {
|
||||
return FromAfero(&afero.FromIOFS{FS: fSys})
|
||||
}
|
||||
|
||||
// NewBasePathFs returns a new BaseFS which wraps the given filesystem with a base path.
|
||||
func NewBasePathFs(fSys FS, basePath string) *BaseFS {
|
||||
return FromAfero(afero.NewBasePathFs(fSys, basePath))
|
||||
}
|
||||
|
||||
// NewOsFs returns a new BaseFS which wraps the OS filesystem.
|
||||
func NewOsFs() *BaseFS {
|
||||
return FromAfero(afero.NewOsFs())
|
||||
}
|
||||
|
||||
// NewReadOnlyFs returns a new BaseFS which wraps the given filesystem with a read-only filesystem.
|
||||
func NewReadOnlyFs(FfSys FS) *BaseFS {
|
||||
return FromAfero(afero.NewReadOnlyFs(FfSys))
|
||||
}
|
||||
|
||||
// NewMemMapFs returns a new BaseFS which wraps the memory filesystem.
|
||||
func NewMemMapFs() *BaseFS {
|
||||
return FromAfero(afero.NewMemMapFs())
|
||||
}
|
||||
Reference in New Issue
Block a user