feat(blog,fs): wrapppers for the std fs.FS and fs.File interfaces
This commit is contained in:
59
blogo/fs.go
59
blogo/fs.go
@@ -28,3 +28,62 @@ type File interface {
|
|||||||
fs.File
|
fs.File
|
||||||
Metadata() Metadata
|
Metadata() Metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type wrapperFS struct {
|
||||||
|
fs.FS
|
||||||
|
metadata Metadata
|
||||||
|
immutable bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func FsFS(f fs.FS, immutable ...bool) FS {
|
||||||
|
var m Metadata
|
||||||
|
var i bool
|
||||||
|
if len(immutable) > 0 && immutable[0] {
|
||||||
|
i = true
|
||||||
|
m = ImmutableMetadata(MetadataMap(map[string]any{}))
|
||||||
|
} else {
|
||||||
|
i = false
|
||||||
|
m = MetadataMap(map[string]any{})
|
||||||
|
}
|
||||||
|
|
||||||
|
return &wrapperFS{
|
||||||
|
FS: f,
|
||||||
|
metadata: m,
|
||||||
|
immutable: i,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *wrapperFS) Metadata() Metadata {
|
||||||
|
return f.metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *wrapperFS) Open(name string) (File, error) {
|
||||||
|
file, err := f.FS.Open(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return FsFile(file, f.immutable), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type wrapperFile struct {
|
||||||
|
fs.File
|
||||||
|
metadata Metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
func FsFile(f fs.File, immutable ...bool) File {
|
||||||
|
var m Metadata
|
||||||
|
if len(immutable) > 0 && immutable[0] {
|
||||||
|
m = ImmutableMetadata(MetadataMap(map[string]any{}))
|
||||||
|
} else {
|
||||||
|
m = MetadataMap(map[string]any{})
|
||||||
|
}
|
||||||
|
|
||||||
|
return &wrapperFile{
|
||||||
|
File: f,
|
||||||
|
metadata: m,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *wrapperFile) Metadata() Metadata {
|
||||||
|
return f.metadata
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user