diff --git a/blogo/fs/fs.go b/blogo/fs/fs.go index 8db8e66..6071fca 100644 --- a/blogo/fs/fs.go +++ b/blogo/fs/fs.go @@ -16,76 +16,53 @@ package fs import ( - "io/fs" + iofs "io/fs" ) -var ErrNotExist = fs.ErrNotExist - type FS interface { Metadata() Metadata Open(name string) (File, error) } type File interface { - fs.File + iofs.File Metadata() Metadata } -type wrapperFS struct { - fs.FS - metadata Metadata - immutable bool -} +// Alias for "io/fs" +var ( + ErrInvalid = iofs.ErrInvalid // "invalid argument" + ErrPermission = iofs.ErrPermission // "permission denied" + ErrExist = iofs.ErrExist // "file already exists" + ErrNotExist = iofs.ErrNotExist // "file does not exist" + ErrClosed = iofs.ErrClosed // "file already closed" +) -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{}) - } +// Alias for "io/fs" +func FormatDirEntry(dir DirEntry) string { return iofs.FormatDirEntry(dir) } - return &wrapperFS{ - FS: f, - metadata: m, - immutable: i, - } -} +// Alias for "io/fs" +func FormatFileInfo(info FileInfo) string { return iofs.FormatFileInfo(info) } -func (f *wrapperFS) Metadata() Metadata { - return f.metadata -} +// TODO: func Glob(fsys FS, pattern string) (matches []string, err error) { return iofs.Glob(fsys, pattern) } +// TODO: func ReadFile(fsys FS, name string) ([]byte, error) {return iofs.ReadFile(fsys, name)} -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 -} +// Alias for "io/fs" +func ValidPath(name string) bool { return iofs.ValidPath(name) } -type wrapperFile struct { - fs.File - metadata Metadata -} +// TODO: func WalkDir(fsys FS, root string, fn WalkDirFunc) error { return iofs.WalkDir(fsys, root, fn) } -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 -} +// Alias for "io/fs" +type ( + DirEntry = iofs.DirEntry + FileInfo = iofs.FileInfo + FileMode = iofs.FileMode + GlobFS = iofs.GlobFS + PathError = iofs.PathError + ReadDirFS = iofs.ReadDirFS + ReadDirFile = iofs.ReadDirFile + ReadFileFS = iofs.ReadFileFS + StatFS = iofs.StatFS + SubFS = iofs.StatFS + WalkDirFunc = iofs.WalkDirFunc +) diff --git a/blogo/fs/iofs.go b/blogo/fs/iofs.go new file mode 100644 index 0000000..18c15c4 --- /dev/null +++ b/blogo/fs/iofs.go @@ -0,0 +1,79 @@ +// Copyright 2025-present Gustavo "Guz" L. de Mello +// Copyright 2025-present The Lored.dev Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fs + +import ( + iofs "io/fs" +) + +func FsFS(f iofs.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, + } +} + +type wrapperFS struct { + iofs.FS + metadata Metadata + immutable bool +} + +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 +} + +func FsFile(f iofs.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, + } +} + +type wrapperFile struct { + iofs.File + metadata Metadata +} + +func (f *wrapperFile) Metadata() Metadata { + return f.metadata +}