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
|
||||
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