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 }