vfs/file.go

75 lines
1.0 KiB
Go

package vfs
import (
"bytes"
"io/fs"
"os"
"time"
)
type File struct {
name string
mode os.FileMode
modified time.Time
open bool
data *bytes.Buffer
}
type fileInfo struct {
name string
size int64
modified time.Time
mode os.FileMode
}
func (f *File) Stat() (fs.FileInfo, error) {
if f.open {
return &fileInfo{
name: f.name,
size: int64(f.data.Len()),
modified: f.modified,
mode: f.mode,
}, nil
}
return nil, fs.ErrClosed
}
func (f *File) Read(data []byte) (int, error) {
if f.open {
return f.data.Read(data)
}
return 0, fs.ErrClosed
}
func (f *File) Close() error {
if f.open {
f.open = false
return nil
}
return fs.ErrClosed
}
func (f fileInfo) Name() string {
return f.name
}
func (f fileInfo) Size() int64 {
return f.size
}
func (f fileInfo) Mode() fs.FileMode {
return f.mode
}
func (f fileInfo) ModTime() time.Time {
return f.modified
}
func (f fileInfo) IsDir() bool {
return f.mode == fs.ModeDir
}
func (f fileInfo) Sys() any {
return nil
}